LeetCode 788. Rotated Digits

Description

https://leetcode.com/problems/rotated-digits/

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 (on this case they are rotated in a different direction, in other words 2 or 5 gets mirrored); 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].

Explanation

From 1 to N, check how many numbers can have different rotate numbers.

Python Solution

class Solution:
    def rotatedDigits(self, N: int) -> int:
        count = 0
        
        mapping = {
            '0': '0',
            '1': '1',
            '2': '5',
            '5': '2',
            '6': '9',
            '8': '8',
            '9': '6',            
        }
        
        for i in range(1, N + 1):
            
            i_str = str(i)
            
            rotated_str = ""
            can_rotate = True
            for c in i_str:
                if c not in mapping:
                    can_rotate = False
                    break
                rotated_str += mapping[c]
                
            if can_rotate and rotated_str != i_str:
                count += 1
                
        return count
  • Time Complexity: O(N).
  • Space Complexity: O(N).

Leave a Reply

Your email address will not be published. Required fields are marked *