标签:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
这个题思路不难,大致思路是
把第一个字母看做一部分,后面的所有字母看做一部分。用第一个字母和后面的所有字母依次交换,每交换一次把后一部分的字符串执行相应的操作。执行完之后,再把这一层刚刚换了的两个字母换回来,再用第一个和后面部分的下一个互换,反复执行
注意:可是这个有一个步骤是需要互换的,这个就很烦,最开始想到了用数组,后来感觉输出还要转成string存进ArrayList类型变量中,就放弃了。准备用Stringbuffer类的设置某一的索引位的字符,可是对java的类库不熟。。。本地测试成功了,可是在线oj一直不行。
于是看了大家的讨论,发现原来 new string(参数这里可以传入字符类型的数组),简直太方便了,以前还各种循环拼起来。 这样的话就用数组做,也不麻烦。
还需要注意一点就是万一原字符串是 aab类似的,这样包看会不会重复,可以用arraylist的contains的方法判断
代码参考来自 牛课网 老石基
import java.util.*; public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> result = new ArrayList<String>(); if(str==null||str.length()==0) return result; char[] c = str.toCharArray(); Permutation(result, c, 0, c.length); Collections.sort(result); return result; } public void Permutation(ArrayList<String> list,char[] c, int star,int end){ if(star==end-1){ String result = new String(c); if(!list.contains(result)) list.add(result); return; } //交換 for(int i = star;i<end;i++){ char temp = c[star]; char temp2 = c[i]; c[star] = temp2; c[i] = temp; Permutation(list,c,star+1,end); c[star] = temp; c[i] = temp2; } } }
标签:
原文地址:http://www.cnblogs.com/tobemaster/p/5907771.html