劍指offer:字串的組合(java)
阿新 • • 發佈:2019-02-18
字串的組合:
給一個字串,比如ABC, 把所有的組合,即:A, B, C, AB, AC, BC, ABC, 都找出來。
解題思路:
假設我們想在長度為n的字串中求m個字元的組合。我們先從頭掃描字串的第一個字元。針對第一個字元,我們有兩種選擇:一是把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選取m-1個字元;二是不把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選擇m個字元。這兩種選擇都很容易用遞迴實現。
public static void combine(char chs[]){ if(chs.length == 0) return ; Stack<Character> stack = new Stack<Character>(); for(int i = 1; i <= chs.length; i++){ combine(chs, 0, i, stack); } } //從字元陣列中第begin個字元開始挑選number個字元加入stack中 public static void combine(char []chs, int begin, int number, Stack<Character> stack){ if(number == 0){ System.out.println(stack.toString()); return ; } if(begin == chs.length){ return; } stack.push(chs[begin]); combine(chs, begin + 1, number - 1, stack); stack.pop(); combine(chs, begin + 1, number, stack); }