[LeetCode] Confusing Number

1056. Confusing Number

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 true if it is a confusing number, or false otherwise.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
bool confusingNumber(int n) {
int N = n, rev = 0;
unordered_set<int> bad{2,3,4,5,7};
while(N) {
int d = N % 10;
N /= 10;
if(bad.count(d)) return false;
if(d == 6) d = 9;
else if(d == 9) d = 6;
rev = rev * 10 + d;
}
return n != rev;
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2023/01/01/PS/LeetCode/confusing-number/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.