题解 | #牛群字母的集合#
牛群字母的集合
https://www.nowcoder.com/practice/5aa097cccc0241febe1054bd85ce299b?tpId=363&tqId=10606143&ru=/exam/oj&qru=/ta/super-company23Year/question-ranking&sourceUrl=%2Fexam%2Foj
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
如果你觉得本篇文章对你有帮助的话,可以点个赞支持一下,感谢~