2008年07月22日

順列生成メソッド:僕も書いてみた

  
元ネタ:http://blogs.wankuma.com/rti/archive/2008/07/18/149606.aspx

僕もC#3.0で作ってみた。


public IEnumerable<string> GetPermutation(string str) {
if (str.Length == 1)
yield return str;
else {
char[] array = str.ToCharArray();
for (int i = 0; i < array.Length; i++) {
Swap(array, 0, i);
foreach (var s in GetPermutation(new string(array,1, str.Length - 1)))
yield return array[0] + s;
}
}
}

private void Swap(char[] array, int i, int j) {
char temp = array[i];
array[i] = array[j];
array[j] = temp;
}


これで、

 GetPermutation("abcd").ToList().ForEach(s => Console.WriteLine(s));


と書けば、答えがプリントされる。

テストが十分じゃないけど、たぶんいけると思う。



この記事へのコメント
はじめまして。taguoといいます。
僕も書いてみました。
http://d.hatena.ne.jp/taguo/20080722/1216745650
トラックバックが飛ばなかったみたいなのでコメントで。
Posted by taguo at 2008年07月23日 10:03
はじめまして。
トラックバックは、スパム防止のため、承認したものだけ公開されるようになっています。先ほど承認しておきました。

おおっ、LINQで書けるんですね。すごいなー。


Posted by Gushwell at 2008年07月23日 20:45
トラックバックは待っていれば良かったんですね。コメント欄まで使ってしまってスミマセン^^;;
Posted by taguo at 2008年07月24日 00:57
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51577953
この記事へのトラックバック
順列生成メソッド 窓際プログラマーの独り言 -C#の話題を中心に:順列生成メソッド:僕も書いてみた やってみました。 static IEnumerable<string> GetPermutation( string str ) { return Enumerable.Range( 0, str.Length ) .Select( _ => str.ToCharArray() )
[C#]順列【一生酩酊】at 2008年07月23日 01:54