题解 | #牛群字母的集合#

牛群字母的集合

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

如果你觉得本篇文章对你有帮助的话,可以点个赞支持一下,感谢~

全部评论

相关推荐

03-21 08:46
已编辑
门头沟学院 C++
一个什么都不会的学生:当你有硕士学历的时候HR会说就是比本科生强
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务