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号