剑指offer:字符串的排列(动态规划,递归)

题目:

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

答案:

递归的方法,代码如下:

import java.util.ArrayList;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> result = new ArrayList<>();
        if(str==null||str.length()==0){
            return result;
        }
        for(int i=0;i<str.length();i++){
            if(i>0&&str.charAt(i)==str.charAt(i-1)){
                continue;
            }
            StringBuilder substr = new StringBuilder().append(str.substring(0,i));
            if(i+1<str.length()){
                substr.append(str.substring(i+1,str.length()));
            }
            ArrayList<String> temp = Permutation(substr.toString());
            if(temp.size()>0){
                for(String ss:temp){
                    StringBuilder sb = new StringBuilder().append(str.charAt(i)).append(ss);
                    result.add(sb.toString());
                }
            }else{
                StringBuilder sb = new StringBuilder().append(str.charAt(i));
                result.add(sb.toString());
            }
            
        }
        return result;
    }
    
}
发布了92 篇原创文章 · 获赞 2 · 访问量 8396

猜你喜欢

转载自blog.csdn.net/wyplj2015/article/details/104908325