题解 | #字符串的排列#TOP58

思路:
两种方法 1.起始位置有n种选择,所以每次更换i位置和起始位置的值,然后再递归
2.起始位置固定,例如第1个数,固定,剩下的有 n - 1 种可能,然后递归,回溯

import java.util.*;
public class Solution {
    public ArrayList<String> Permutation(String str) {
       if(str == null){
           return null;
       }
        ArrayList<String> result = new ArrayList<>();
        permutationHelper(str.toCharArray(),0,result);
        Collections.sort(result);
        return result;
    }
        public void permutationHelper(char[] chars, int start, ArrayList<String> result){
        if(start==chars.length -1 ){
            result.add(String.valueOf(chars));
            return;
        }
        Set<Character> charSet = new HashSet<>();
        for (int i = start;i<chars.length;i++){

            if(!charSet.contains(chars[i])) {
                charSet.add(chars[i]);
                char temp = chars[i];
                chars[i] = chars[start];
                chars[start] = temp;
                //i + 1后的全排列
                permutationHelper(chars, start + 1, result);
                char temp2 = chars[i];
                chars[i] = chars[start];
                chars[start] = temp2;
            }
        }
    }
}
全部评论

相关推荐

友友们,我实在是不太明白,校招的话现在大多也是提前实习,然后转正也是需要考核的,考核通过才能转正,那这跟实习转正有什么区别啊
苦闷的仰泳鲈鱼刷了1...:提前实习,是让你提前熟悉业务的,后续是入职后可以减少试用期的(大部分是包入职的);转正实习,要是hc不够或者其他原因,让你正式offer可能都没有,这个风险很大。 ---个人看法和了解到的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务