天天看點

字元串的排列

    題目:輸入一個字元串,列印出該字元串中字元的所有的排列。例如輸入字元串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 &lt; 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 &lt; 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,如需轉載請自行聯系原作者