import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串一维数组
*/
private static ArrayList<String> resultList = new ArrayList<>();
public String[] cowCombination (String s) {
StringBuilder tempStr = new StringBuilder();
boolean [] isSelected = new boolean[s.length()];
backTrack(tempStr, s, isSelected, 0);
String [] result = new String[resultList.size()];
for (int i = 0; i < resultList.size(); i++) {
result[i] = resultList.get(i);
}
return result;
}
public void backTrack(StringBuilder tempStr, String s, boolean [] isSelected,
int start) {
resultList.add(tempStr.toString());
for (int i = start; i < s.length(); i++) {
if (i != start && s.charAt(i) == s.charAt(i - 1)) {
continue;
}
if (!isSelected[i]) {
tempStr.append(s.charAt(i));
isSelected[i] = true;
backTrack(tempStr, s, isSelected, i + 1);
isSelected[i] = false;
tempStr.deleteCharAt(tempStr.length() - 1);
}
}
}
}
本题知识点分析:
1.递归
2.回溯
3.有序集合存取
4.数学模拟
5.集合转数组
本题解题思路分析:
1.利用递归+回溯,如果题目没有写重复编号,那么不用进行去重判断
2.如果要去重,每次递归传递一个start表明从第几个元素开始
3.如果i!=start如果不是第一次,并且一前一后两个字符相等,那么就continue进入下一次的循环
4.经典的字符排序,都是一些变式,注意去重,然后是自定义排序。
本题使用编程语言: Java
如果你觉得本篇文章对你有帮助的话,可以点个赞支持一下,感谢~

京公网安备 11010502036488号