基于回溯法思想(排列树):
剑指offer---字符串的排列

第一次交换:字符串首字母与其他位置字母分别交换,形成多个子树;
再第一次交换基础上,发生第二次交换,第二次交换是字符串第二个字母与其他位置字母交换;

直到最后一个字母结束;

public ArrayList<String> Permutation(String str) {
       List<String> res = new ArrayList<>();
        if(str!=null && str.length()>0){
            PermutationHelper(str.toCharArray(), 0, res);
            Collections.sort(res);
        }
        return (ArrayList)res;
    }
    private void PermutationHelper(char[] cs, int i, List<String> res){
        if(i==cs.length-1){
            String val = String.valueOf(cs);
            if(!res.contains(val)){
                res.add(val);
            }
        }else{
            for(int j=i; j<cs.length; j++){
                swap(cs, i, j);
                PermutationHelper(cs, i+1, res);
                swap(cs, i, j);
            }
        }
        
    }
    private void swap(char[] cs, int i, int j){
        char temp = cs[i];
        cs[i] = cs[j];
        cs[j] = temp;
    }

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-28
  • 2021-08-06
猜你喜欢
  • 2021-07-06
  • 2021-12-20
  • 2021-05-31
  • 2022-01-08
  • 2021-10-18
  • 2022-12-23
相关资源
相似解决方案