fork download
  1. using System;
  2. using System.Diagnostics;
  3.  
  4. public class Test
  5. {
  6. public static bool IsUnique1(int num) {
  7. int[] digits = new int[10];
  8. num = Math.Abs(num);
  9. while (num > 0) {
  10. int r = num % 10;
  11. num /= 10;
  12.  
  13. digits[r] ++;
  14. if (digits[r] > 1) {
  15. return false;
  16. }
  17. }
  18. return true;
  19. }
  20. public static bool IsUnique2(int[] digits, int num) {
  21. Array.Clear(digits, 0, 10);
  22. num = Math.Abs(num);
  23. while (num > 0) {
  24. int r = num % 10;
  25. num /= 10;
  26.  
  27. digits[r] ++;
  28. if (digits[r] > 1) {
  29. return false;
  30. }
  31. }
  32. return true;
  33. }
  34.  
  35. public static bool IsUnique3(int[] digits, int num) {
  36. for (int i = 0; i < 10; i++)
  37. digits[i] = 0;
  38. num = Math.Abs(num);
  39. while (num > 0) {
  40. int r = num % 10;
  41. num /= 10;
  42.  
  43. digits[r] ++;
  44. if (digits[r] > 1) {
  45. return false;
  46. }
  47. }
  48. return true;
  49. }
  50.  
  51. public static void Main()
  52. {
  53. int n = 20000000;
  54. int[] digits = new int[10];
  55. Stopwatch sw = new Stopwatch();
  56.  
  57. int sum = 0;
  58. sw.Start();
  59. for (int i = 1; i < n; i++) {
  60. if (IsUnique1(i))
  61. sum++;
  62. }
  63. sw.Stop();
  64. Console.WriteLine("ElapsedNew={0}, sum={1}",sw.Elapsed, sum);
  65.  
  66. sum = 0;
  67. sw = new Stopwatch();
  68. sw.Start();
  69. for (int i = 1; i < n; i++) {
  70. if (IsUnique2(digits, i))
  71. sum++;
  72. }
  73. sw.Stop();
  74. Console.WriteLine("ElapsedPass={0}, sum={1}",sw.Elapsed, sum);
  75.  
  76. sum = 0;
  77. sw = new Stopwatch();
  78. sw.Start();
  79. for (int i = 1; i < n; i++) {
  80. if (IsUnique3(digits, i))
  81. sum++;
  82. }
  83. sw.Stop();
  84. Console.WriteLine("ElapsedLoop={0}, sum={1}",sw.Elapsed, sum);
  85. }
  86. }
Success #stdin #stdout 3.67s 29688KB
stdin
Standard input is empty
stdout
ElapsedNew=00:00:01.1078163, sum=894330
ElapsedPass=00:00:01.4037842, sum=894330
ElapsedLoop=00:00:01.1581422, sum=894330