字串的排列

2021-07-09 15:48:58 字數 2566 閱讀 8450

這個問題,難點在於兩個地方。

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為例來分析...