788. Rotated Digits
by Botao Xiao
788. Rotated Digits
Question
X is a good number if after rotating each digit individually by 180 degrees, we get a valid number that is different from X. Each digit must be rotated - we cannot choose to leave it alone.
A number is valid if each digit remains a digit after rotation. 0, 1, and 8 rotate to themselves; 2 and 5 rotate to each other; 6 and 9 rotate to each other, and the rest of the numbers do not rotate to any other number and become invalid.
Now given a positive number N, how many numbers X from 1 to N are good?
Example:
Input: 10
Output: 4
Explanation:
There are four good numbers in the range [1, 10] : 2, 5, 6, 9.
Note that 1 and 10 are not good numbers, since they remain unchanged after rotating.
Note:
- N will be in range [1, 10000].
Solution
- Method 1: HashMap / Array
class Solution { private int[] arr; public int rotatedDigits(int N) { this.arr = new int[10]; Arrays.fill(arr, -1); arr[0] = 0; arr[1] = 1; arr[8] = 8; arr[2] = 5; arr[5] = 2; arr[6] = 9; arr[9] = 6; int count = 0; for(int i = 1; i <= N; i++){ if(isValid(i)) count++; } return count; } private boolean isValid(int N){ int origin = N; int next = 0; int v = 1; while(N > 0){ int cur = N % 10; if(arr[cur] == -1) return false; next = next + arr[cur] * v; N /= 10; v *= 10; } return origin != next; } }
Subscribe via RSS