我想打印一些可能的非空字母序列。
String str="ABC";
预期输出为
A,B,C
AB,AC,BC,BA,CA,CB
ABC,ACB,BAC,BCA,CAB,CBA`
但我得到下面的输出是不正确的。如何修复我的代码
BB CC A AB ACC BC ABC AC B BBC CCC BCC C CBC CB
我已经用Recurion写了下面的代码
String tiles = "ABC";
Set<String> ans = new HashSet<>();
solve(tiles, 0, "", ans);
public static void solve(String tiles, int idx, String output, Set<String> ans) {
ans.add(output);
if (idx >= tiles.length()) {
return;
}
for (int i = idx; i < tiles.length(); i++) {
solve(tiles, idx + 1, output + tiles.charAt(i), ans);
}
}
4条答案
按热度按时间mklgxw1f1#
您需要忽略输出中第一次传递的“”,然后需要忽略已经传递的每个字母
产出
ufj5ltwl2#
你可以试试这个
"置换"方法有3个参数:字符串、前缀字符串和一组排列。
1.然后调用置换方法3次:
1.然后调用置换方法3次:
1.一个带有原始字符串和前缀的
1.一个带有其余字符串和前缀的
这样,该函数探索输入字符串中所有可能的字符排列,包括在排列中不包含任何字符的选项和位置排列,但不包括空字符串作为选项。
然后你可以这样使用:
fjaof16o3#
进行1次变更:
cedebl8k4#
这是一个非常流行的回溯问题。你可以在这里找到几乎相同的问题:https://leetcode.com/problems/subsets/
输入的是数字而不是字符,但思路是一样的。您可以切换到解决方案选项卡,探索不同的答案:https://leetcode.com/problems/subsets/solutions/