LeetCode 1088. Confusing Number II Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
1088. Confusing Number II

Description

A confusing number is a number that when rotated 180 degrees becomes a different number with each digit valid.

We can rotate digits of a number by 180 degrees to form new digits.

  • When 0, 1, 6, 8, and 9 are rotated 180 degrees, they become 0, 1, 9, 8, and 6 respectively.
  • When 2, 3, 4, 5, and 7 are rotated 180 degrees, they become invalid.

Note that after rotating a number, we can ignore leading zeros.

  • For example, after rotating 8000, we have 0008 which is considered as just 8.

Given an integer n, return the number of confusing numbers in the inclusive range [1, n].

 

Example 1:

Input: n = 20
Output: 6
Explanation: The confusing numbers are [6,9,10,16,18,19].
6 converts to 9.
9 converts to 6.
10 converts to 01 which is just 1.
16 converts to 91.
18 converts to 81.
19 converts to 61.

Example 2:

Input: n = 100
Output: 19
Explanation: The confusing numbers are [6,9,10,16,18,19,60,61,66,68,80,81,86,89,90,91,98,99,100].

 

Constraints:

  • 1 <= n <= 109

Solutions

Solution 1

PythonJavaC++GoTypeScript
class Solution: def confusingNumberII(self, n: int) -> int: def check(x: int) -> bool: y, t = 0, x while t: t, v = divmod(t, 10) y = y * 10 + d[v] return x != y def dfs(pos: int, limit: bool, x: int) -> int: if pos >= len(s): return int(check(x)) up = int(s[pos]) if limit else 9 ans = 0 for i in range(up + 1): if d[i] != -1: ans += dfs(pos + 1, limit and i == up, x * 10 + i) return ans d = [0, 1, -1, -1, -1, -1, 9, -1, 8, 6] s = str(n) return dfs(0, True, 0)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !