using System; using System.Diagnostics; public class Test { public static bool IsUnique1(int num) { int[] digits = new int[10]; num = Math.Abs(num); while (num > 0) { int r = num % 10; num /= 10; digits[r] ++; if (digits[r] > 1) { return false; } } return true; } public static bool IsUnique2(int[] digits, int num) { Array.Clear(digits, 0, 10); num = Math.Abs(num); while (num > 0) { int r = num % 10; num /= 10; digits[r] ++; if (digits[r] > 1) { return false; } } return true; } public static bool IsUnique3(int[] digits, int num) { for (int i = 0; i < 10; i++) digits[i] = 0; num = Math.Abs(num); while (num > 0) { int r = num % 10; num /= 10; digits[r] ++; if (digits[r] > 1) { return false; } } return true; } public static void Main() { int n = 20000000; int[] digits = new int[10]; Stopwatch sw = new Stopwatch(); int sum = 0; sw.Start(); for (int i = 1; i < n; i++) { if (IsUnique1(i)) sum++; } sw.Stop(); Console.WriteLine("ElapsedNew={0}, sum={1}",sw.Elapsed, sum); sum = 0; sw = new Stopwatch(); sw.Start(); for (int i = 1; i < n; i++) { if (IsUnique2(digits, i)) sum++; } sw.Stop(); Console.WriteLine("ElapsedPass={0}, sum={1}",sw.Elapsed, sum); sum = 0; sw = new Stopwatch(); sw.Start(); for (int i = 1; i < n; i++) { if (IsUnique3(digits, i)) sum++; } sw.Stop(); Console.WriteLine("ElapsedLoop={0}, sum={1}",sw.Elapsed, sum); } }