28. 列印字串中所有字元的排列
阿新 • • 發佈:2020-12-15
技術標籤:劍指offer--JAVA實現
題目描述:輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸
入字串abc,則打印出由字元a,b,c 所能排列出來的所有字串abc,acb,bac,bca,cab
和cba。
思路:將當前位置的字元和前一個字元位置交換,遞迴。
程式碼實現:
public Set<String> Permutation(String str) { Set<String> res = new HashSet<>(); if (str == null || str.length() == 0) { return res; } helper(res, 0, str.toCharArray()); List result = new ArrayList(res); // 符合結果的輸出順序 Collections.sort(result); System.out.println(result); return res; } private void helper(Set<String> res, int index, char[] s) { if (index == s.length - 1) { res.add(String.valueOf(s)); return; } for (int i = index; i < s.length; i++) { swap(s, index, i); helper(res, index + 1, s); swap(s, index, i); } } public void swap(char[] c, int a,int b) { char temp = c[a]; c[a] = c[b]; c[b] = temp; }