【字符串】 788. 旋转数字

题目:

解答:

方法一:暴力解法【通过】

思路:

遍历从 1 到 N 的每个数字 X,判断 X 是否为好数。 如果 X 中存在 3、4、7 这样的无效数字,则 X 不是一个好数。 如果 X 中不存在 2、5、6、9 这样的旋转后会变成不同的数字,则 X 不是一个好数。 否则,X 可以旋转成一个不同的有效数字。

算法:

判断数字 X 是否为好数,有两种实现方式。最直观的一种方法是把 X 转换成字符串然后解析;另一种方法是递归检查 X 的最后一位数字。

 1 class Solution {
 2 public:
 3     int rotatedDigits(int N) 
 4     {
 5         // Count how many n in [1, N] are good.
 6         int ans = 0;
 7         for (int n = 1; n <= N; ++n)
 8         {
 9             if (good(n, false)) 
10             {
11                 ans++;
12             }
13         }
14         return ans;
15     }
16 
17     // Return true if n is good.
18     // The flag is true iff we have an occurrence of 2, 5, 6, 9.
19     bool good(int n, bool flag) 
20     {
21         if (n == 0) 
22         {   
23             return flag;
24         }
25 
26         int d = n % 10;
27         if (d == 3 || d == 4 || d == 7) 
28         {
29             return false;
30         }
31         if (d == 0 || d == 1 || d == 8) 
32         {
33             return good(n / 10, flag);
34         }
35 
36         return good(n / 10, true);
37     }
38 };

猜你喜欢

转载自www.cnblogs.com/ocpc/p/12823515.html