题解 | #字符串的排列#
字符串的排列
http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7
递归,
每次将第一个字符与第i个字符对换,
for(int i = 0; i< str.length();i++){ if(i == 0 || str.charAt(i) != str.charAt(0)){ //将第一个字符与第i个字符对换 char temp = str.charAt(i); str.setCharAt(i, str.charAt(0)); str.setCharAt(0, str.charAt(i)); .... //完事之后记得再将原来的字符调换回去 str.setCharAt(0, str.charAt(i)); str.setCharAt(i, temp); } }
所以总体代码如下:
public ArrayList<String> Permutation(String str) { StringBuilder stringBuilder = new StringBuilder(str); ArrayList<String> result = permutationHelper(stringBuilder); for (String resultString : result) { System.out.println(resultString); } return result; } public ArrayList<String> permutationHelper(StringBuilder str){ ArrayList<String> result = new ArrayList<>(); if (str.length() == 1){ result.add(str.toString()); }else { for (int i = 0; i < str.length(); i++) { if (i == 0 || str.charAt(i) != str.charAt(0)){ char temp = str.charAt(i); str.setCharAt(i, str.charAt(0)); str.setCharAt(0, str.charAt(i)); ArrayList<String> newResult = permutationHelper(new StringBuilder(str.substring(1))); for (String resultString : newResult) { result.add(temp+resultString); } str.setCharAt(0, str.charAt(i)); str.setCharAt(i, temp); } } } return result; }