788. 旋转数字『简单』
题目来源于力扣(LeetCode)
一、题目
题目相关标签:字符串
说明:
- N 的取值范围是
[1, 10000]
。
二、解题思路
-
遍历 1 ~ N 的数字
-
判断所遍历数字的每一位是否符合要求,符合则将结果 + 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);
}