788. 旋转数字『简单』

题目来源于力扣(LeetCode

一、题目

788. 旋转数字

题目相关标签:字符串

说明:

  • N 的取值范围是 [1, 10000]

二、解题思路

  1. 遍历 1 ~ N 的数字

  2. 判断所遍历数字的每一位是否符合要求,符合则将结果 + 1

    要求:

    • 数字的每一位都不为 3,4 ,7

    • 数字的位中必定有一位 2,5,6,9;使该数字旋转后能得到不同的数字

三、代码实现

public static int rotatedDigits(int N) {
    int ans = 0;
    // 遍历元素,范围从 1 ~ N
    for (int i = 1; i <= N; i++) {
        int k = i;
        // 变量 flag 记录是否可以旋转数字后与 k 不同
        boolean flag = false;

        // 对数字 k 的每一位进行判断
        while (k > 0) {
            // 取数字的末位
            int n = k % 10;
            // 4 个数中最少出现 1 次,即可旋转成不同的数字
            if (n == 2 || n == 5 || n == 6 || n == 9) {
                flag = true;
            }
            // 3 个数中任一出现一个就会旋转成无效数字
            if (n == 3 || n == 7 || n == 4) {
                break;
            }
            k /= 10;
        }
        // k 能够被除尽且可以翻转成不同的数字时,个数加 1
        if (k == 0 && flag) {
            ans += 1;
        }
    }
    return ans;
}

四、执行用时

五、部分测试用例

public static void main(String[] args) {
    int num = 10;  // output:4  {2, 5, 6, 9}
    int num = 20;  // output:8  {2, 5, 6, 9, 12, 15, 16, 19, 20}
    int result = rotatedDigits(num);
    System.out.println(result);
}
posted @ 2020-05-26 23:05  知音12138  阅读(217)  评论(0编辑  收藏  举报