剑指Offer38:字符串的全排列

字符串的全排列

当输入a,b,c三个字符串的时候,请输出它的全部排列情况.
思路:当我们进行一个问题的解决的时候,尝试把问题分解成小问题,把一个字符串分成一个字符和n-1个字符,然后交换第一个字符和n-1个字符中的全部,然后继续固定第二个字符,继续排列n-2个字符串,这样不断继续下去,就是全排列。
思路:`List res = new ArrayList<>();

public List<String> Permutation(String str){

    if(str==null){

        return res;
    }
    Permutation(str.toCharArray(),0);

    Collections.sort(res);

    return res;
}

//i代表每次的数据规模改变
//str好让替换

public void Permutation(char[] str,int i){

    //递归函数怎么处理,递归终点
    if(i==str.length-1){
        //满足就加一次
        res.add(String.valueOf(str));
    }else{
        //第一次进来的时候,算是将第一个和后面所有的进行交换,for循环,为啥要交换回来呢,因为for循环的第二次的第一个位置要换掉.
        //递归体
        for(int j=i;j<str.length;j++){

            if(j!=i&&str[i]==str[j])
                continue;

            swap(str,i,j);

            Permutation(str,i+1);
            //为啥2次交换
            swap(str,i,j);   //换回来
        }

    }

}

public void swap(char[] str,int i,int j){

    char temp = str[i];

    str[i] = str[j];

    str[j] = temp;

}

`

猜你喜欢

转载自blog.csdn.net/weixin_39137699/article/details/89525822