輸入一個字串,按字典序打印出該字串中字元的所有排列(劍指offer)
阿新 • • 發佈:2020-08-16
輸入一個字串,按字典序打印出該字串中字元的所有排列(劍指offer)
參考連結:https://blog.csdn.net/Felix_ar/article/details/84038226
public ArrayList<String> Permutation(String str) { ArrayList<String> res = new ArrayList<String>(); if(str != null && str.length() > 0){ process(str.toCharArray(), 0, res); Collections.sort(res);//最後的排序,以保證為字典序 } return res; } public void process(char[] str, int i, ArrayList<String> list){ if(i == str.length-1){ String val = String.valueOf(str); if(!list.contains(val)){ list.add(val); } }else{ for(int j=i; j<str.length; j++){ swap(str,i,j);//交換當前位置與後面的每一個位置上的字母,圖中的1,2,4,7走的都是這個swap process(str, i+1, list); swap(str,i,j);//因為走到這一步就代表整上面的語句return了,也就是確定了一種排列,只要是確定了排列,那麼,我們應該回到確定排列之前的狀態,也就是交換回來;為了便於理解,就上面的圖,圖中的3,5,6走的就是這個swap } } } public void swap(char[] str,int i,int j){ char temp = str[i]; str[i] = str[j]; str[j] = temp; }