题解 | 字符串的排列

字符串的排列

http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

题目的实质是全排列问题求解,
首先是对题目要求编写相应的转换函数。

//数组转换为字符串
    public String change(char[] a){
        StringBuffer res  = new StringBuffer();
        for(char linkString : a){
            res.append(linkString);
        }
        return res.toString();//返回数组
    }

其次是字符串数组转换为集合

 //字符串转换为数组
        char[] a  =str.toCharArray();//转换为字符串数组
        ArrayList<String> ans  =  new ArrayList<String>();
        sovle(ans,a,0,str.length());

核心代码函数:

    private void sovle(ArrayList<String> ans, char[] a, int i, int length) {
        // TODO Auto-generated method stub
        if(i == length-1){
            String resString = change(a);
            ans.add(resString);
        }else{//index不在最后一个位置
            for(int j = i;j<length;j++){
                char temp = a[i];
                a[i] = a[j];
                a[j] = temp;
                //进行下一个字符的交换
                sovle(ans,a,i+1,length);
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }



        }

    }

全部代码:

import java.util.*;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        //字符串转换为数组
        char[] a  =str.toCharArray();//转换为字符串数组
        ArrayList<String> ans  =  new ArrayList<String>();
        sovle(ans,a,0,str.length());
        //定义一个set进行重复数值排序去重
        ans  = new ArrayList<String>(new HashSet<String>(ans));
        Collections.sort(ans);
        return ans;
    }

    //数组转换为字符串
    public static String change(char[] a){
        StringBuffer res  = new StringBuffer();
        for(char linkString : a){
            res.append(linkString);
        }
        return res.toString();//返回数组
    }

    public static void sovle(ArrayList<String> ans, char[] a, int index, int length) {
        // TODO Auto-generated method stub
        if(index == length-1){
            String resString = change(a);
            ans.add(resString);
        }else{//index不在最后一个位置
            for(int i = index;i<length;i++){
                char temp = a[i];
                a[i] = a[index];
                a[index] = temp;
                //进行下一个字符的交换
                sovle(ans,a,index+1,length);
                temp = a[i];
                a[i] = a[index];
                a[index] = temp;
            }



        }

    }
}
全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务