思路:
1.我們求整個字串的排列,可以看成兩步:首先求出所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。
2.第二步固定第乙個字元,求後面所有字元的排列。這個時候我們仍把後面的所有字元分成兩部分:後面字元的第乙個字元,以及這個字元之後的所有字元。然後把第乙個字元逐一和它後面的字元交換。
/**
* 字串的排列 前提:字串中的每個字元都是不相同的
*/ public class stringpermutation
public static void permutation(char arr, int begin)
else
} }
public static void swap(char arr, int index1, int index2)
}
測試用例:
a.功能測試(輸入的字串中有乙個或者多個字元)。
b.特殊輸入測試(輸入的字串的內容為空或者nullptr指標)。
參考:
劍指offer 面試題38 字串的排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。ps 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。其實就是對字串全排列,然後放到 treeset 中。放到tre...
劍指Offer 面試題38 字串的排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。思路 遞迴思路。迴圈固定第乙個位置字母,則後面的排序數等於其餘字元的排序。對其餘字元也一樣進行這樣的操作。最後使用set去重,並排序。...
劍指offer 面試題38 字串的排列
我慣用的dfs模板直接拿來套 class solution int n str.size vector res vector visited n,false string cur sort str.begin str.end dfs res,visited,cur,str return res vo...