題目:輸入一個字元串,列印出該字元串中字元的所有的排列。例如輸入字元串abc,則列印出由字元a、b、c所能排列出來的所有字元串。
解題思路:把字元串分為兩部分,一部分是字元串的第一個字元,另一部分是第一個字元以後的所有字元。接下來求第一個字元以後的所有字元的排列。拿第一個字元和它後面的字元串逐個交換。
C#實作:
<code>public</code> <code>static</code> <code>void</code> <code>Permutation(</code><code>char</code><code>[] pStr)</code>
<code> </code><code>{</code>
<code> </code><code>if</code> <code>(pStr == </code><code>null</code><code>)</code>
<code> </code><code>return</code><code>;</code>
<code> </code><code>int</code> <code>begin = 0;</code>
<code> </code><code>Permutation(pStr, begin);</code>
<code> </code><code>}</code>
<code> </code><code>private</code> <code>static</code> <code>void</code> <code>Permutation(</code><code>char</code><code>[] pStr, </code><code>int</code> <code>begin)</code>
<code> </code><code>if</code> <code>(begin == pStr.Length)</code>
<code> </code><code>Console.WriteLine(pStr);</code>
<code> </code><code>else</code>
<code> </code><code>{</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = begin; i < pStr.Length; i++)</code>
<code> </code><code>{</code>
<code> </code><code>char</code> <code>temp = pStr[i];</code>
<code> </code><code>pStr[i] = pStr[begin];</code>
<code> </code><code>pStr[begin] = temp;</code>
<code> </code><code>Permutation(pStr, begin + 1);</code>
<code> </code><code>temp = pStr[i];</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
Java實作:
<code>public</code> <code>static</code> <code>void</code> <code>permutation(</code><code>char</code><code>[] pStr) {</code>
<code> </code><code>if</code> <code>(pStr == </code><code>null</code><code>)</code>
<code> </code><code>return</code><code>;</code>
<code> </code><code>int</code> <code>begin = </code><code>0</code><code>;</code>
<code> </code><code>permutation(pStr, begin);</code>
<code> </code><code>}</code>
<code> </code><code>private</code> <code>static</code> <code>void</code> <code>permutation(</code><code>char</code><code>[] pStr, </code><code>int</code> <code>begin) {</code>
<code> </code><code>if</code> <code>(begin == pStr.length)</code>
<code> </code><code>System.out.println(pStr);</code>
<code> </code><code>else</code> <code>{</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = begin; i < pStr.length; i++) {</code>
<code> </code><code>char</code> <code>temp = pStr[i];</code>
<code> </code><code>pStr[i] = pStr[begin];</code>
<code> </code><code>pStr[begin] = temp;</code>
<code> </code><code>permutation(pStr, begin + </code><code>1</code><code>);</code>
<code> </code><code>temp = pStr[i];</code>
Python實作:
<code>def</code> <code>permutation(pStr):</code>
<code> </code><code>if</code> <code>pStr </code><code>=</code><code>=</code> <code>None</code><code>:</code>
<code> </code><code>return</code>
<code> </code><code>begin </code><code>=</code> <code>0</code>
<code> </code><code>permutation_child(pStr, begin)</code>
<code>def</code> <code>permutation_child(pStr, begin):</code>
<code> </code><code>if</code> <code>begin </code><code>=</code><code>=</code> <code>len</code><code>(pStr):</code>
<code> </code><code>print</code><code>(pStr)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(begin, </code><code>len</code><code>(pStr)):</code>
<code> </code><code>temp </code><code>=</code> <code>pStr[i]</code>
<code> </code><code>pStr[i] </code><code>=</code> <code>pStr[begin]</code>
<code> </code><code>pStr[begin] </code><code>=</code> <code>temp</code>
<code> </code><code>permutation_child(pStr, begin </code><code>+</code> <code>1</code><code>)</code>
本文轉自 許大樹 51CTO部落格,原文連結:http://blog.51cto.com/abelxu/1978056,如需轉載請自行聯系原作者