TopCoder SRM 583: SwappingDigits
総当りするだけ。
- クエリ式の let を使ってみた
- 入力文字は数字だけなので、
StringComparer.Ordinal
で文字列比較する必要はない。しかし基本的に文字列ソートはこれを使う癖をつけたほうが良さそうなので一応付けてる。
public class SwappingDigits { static public void Swap<T>(ref T a, ref T b) { T t = a; a = b; b = t; } public string SwapString(string s, int a, int b) { var array = s.ToCharArray(); Swap(ref array[a], ref array[b]); return new string(array); } public string minNumber(string num) { int n = num.Length; var q = from i in Enumerable.Range(0, n) from j in Enumerable.Range(0, n) where i <= j let s = SwapString(num, i, j) where s[0] != '0' select s; return q.OrderBy(s => s, StringComparer.Ordinal).First(); } }