返回介绍

lcci / 08.07.Permutation I / README_EN

发布于 2024-06-17 01:04:43 字数 3948 浏览 0 评论 0 收藏 0

08.07. Permutation I

中文文档

Description

Write a method to compute all permutations of a string of unique characters.

Example1:


 Input: S = "qwe"

 Output: ["qwe", "qew", "wqe", "weq", "ewq", "eqw"]

Example2:


 Input: S = "ab"

 Output: ["ab", "ba"]

Note:

  1. All characters are English letters.
  2. 1 <= S.length <= 9

Solutions

Solution 1

class Solution:
  def permutation(self, S: str) -> List[str]:
    def dfs(u, t):
      if u == n:
        ans.append(''.join(t))
        return
      for i in range(n):
        if vis[i]:
          continue
        vis[i] = True
        t.append(S[i])
        dfs(u + 1, t)
        t.pop()
        vis[i] = False

    n = len(S)
    vis = [False] * n
    ans = []
    dfs(0, [])
    return ans
class Solution {
  public String[] permutation(String S) {
    Set<Character> vis = new HashSet<>();
    List<String> ans = new ArrayList<>();
    StringBuilder t = new StringBuilder();
    dfs(0, S, t, ans, vis);
    return ans.toArray(new String[0]);
  }

  private void dfs(int u, String S, StringBuilder t, List<String> ans, Set<Character> vis) {
    if (u == S.length()) {
      ans.add(t.toString());
      return;
    }
    for (char c : S.toCharArray()) {
      if (vis.contains(c)) {
        continue;
      }
      vis.add(c);
      t.append(c);
      dfs(u + 1, S, t, ans, vis);
      t.deleteCharAt(t.length() - 1);
      vis.remove(c);
    }
  }
}
class Solution {
public:
  vector<string> permutation(string S) {
    unordered_set<char> vis;
    vector<string> ans;
    string t = "";
    dfs(0, S, t, ans, vis);
    return ans;
  }

  void dfs(int u, string& S, string& t, vector<string>& ans, unordered_set<char>& vis) {
    if (u == S.size()) {
      ans.push_back(t);
      return;
    }
    for (char& c : S) {
      if (vis.count(c)) continue;
      vis.insert(c);
      t.push_back(c);
      dfs(u + 1, S, t, ans, vis);
      vis.erase(c);
      t.pop_back();
    }
  }
};
func permutation(S string) []string {
  vis := make(map[byte]bool)
  var ans []string
  var t []byte
  var dfs func(u int, t []byte)
  dfs = func(u int, t []byte) {
    if u == len(S) {
      ans = append(ans, string(t))
      return
    }
    for i := range S {
      if vis[S[i]] {
        continue
      }
      vis[S[i]] = true
      t = append(t, S[i])
      dfs(u+1, t)
      vis[S[i]] = false
      t = t[:len(t)-1]
    }
  }
  dfs(0, t)
  return ans
}
/**
 * @param {string} S
 * @return {string[]}
 */
var permutation = function (S) {
  let res = [];
  let arr = [...S];
  let prev = [];
  let record = new Array(S.length).fill(false);
  dfs(arr, 0, prev, record, res);
  return res;
};

function dfs(arr, depth, prev, record, res) {
  if (depth == arr.length) {
    res.push(prev.join(''));
    return;
  }
  for (let i = 0; i < arr.length; i++) {
    if (record[i]) {
      continue;
    }
    prev.push(arr[i]);
    record[i] = true;
    dfs(arr, depth + 1, prev, record, res);
    prev.pop();
    record[i] = false;
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文