這個問題,難點在於兩個地方。
1.如好遍歷出所有的可能組合,也就是乙個排列組合問題。
2.如何去控制排列順序問題。
針對以上兩個問題,我構造了兩個函式,分別解決。
用遞迴思想去解決排列組合的問題:
傳入乙個list,這個list裡包含了string擷取前n個數字的排列組合,傳入的str為擷取後剩下的字元組成的字串,這樣去遞迴,出口是當str的長度為1返回集合。
// 遞迴思路
private listgetcombainestring(listlist,string str)
char c = str.charat(0);
arraylisttemplist = new arraylist();
for(string s : list)
for(int j = i + 1;j < carr.length;j ++)
templist.add(string.valueof(carr));}}
return getcombainestring(templist, str.substring(1, str.length()));
}
到此獲取的列表為所有排列組合,呼叫該函式還應該去除掉重複的string:
然後是第二個難點,排序問題
public arraylist<
string
> permutation(string str)
// 處理排序問題
sortstringbyascii(list);
return
list;
}
使用氣泡排序,分別去比較每個字串的相對位置,比較方法為以此比較高位的ascii碼的大小,用乙個布林值去控制交換。
// 排序問題,冒泡
private
static
void sortstringbyascii(listlist) else
if(list.get(j + 1).charat(position) > list.get(j).charat(position))
ischangeposition = true;
if(ischangeposition)
break;}}
}}
完整**
public
static
void main(string args)
if(count >= 2)
isrepeat = true;
}if(isrepeat) else
*/system.out.println(permutation("abc"));
}public
static arraylistpermutation(string str)
// 處理排序
sortstringbyascii(list);
return
list;
}// 排序問題,冒泡
private
static
void sortstringbyascii(listlist) else
if(list.get(j + 1).charat(position) > list.get(j).charat(position))
ischangeposition = true;
if(ischangeposition)
break;}}
}}// 計算出可能的組合方式
private
static
int getnumberofcombaine(string str)
if(count >= 2)
map.put(c, count);
}// 不考慮重複的排列可能
int sum = 1;
for(int i =1;i <= str.length();i ++)
// 排除重複的數字
for(character c : map.keyset())
}return sum;
}// 遞迴思路
private
static listgetcombainestring(listlist,string str)
char c = str.charat(0);
arraylisttemplist = new arraylist();
for(string s : list)
for(int j = i + 1;j < carr.length;j ++)
templist.add(string.valueof(carr));}}
return getcombainestring(templist, str.substring(1, str.length()));
}
執行結果:[abc, acb, bac, bca, cab, cba] 字串排列
在網上看到了乙個操作字串的題目,該題為 字串排列。大概意思是列出字串中所有字元的所有組合並且輸出無重複。自己做了一下,這裡分享該題的思路,和做法。自我覺得實現的有些麻煩 歡迎指點。問題輸入乙個字串,列印出該字串中字元的所有排列。輸入 字串abc。輸出 列印出由字元a,b,c所能排列出來的所有字串ab...
字串排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。第一種方法 字串拼接 function permutate str else return result console.log pe...
字串的排列
題目 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串 abc,則輸出由字元a b c所能排列出來的所有字串 abc acb bac bca cab和 cba。分析 這是一道很好的考查對遞迴理解的程式設計題,因此在過去一年中頻繁出現在各大公司的面試 筆試題中。我們以三個字元 abc為例來分析...