Confusing Number
Problem
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
, and9
are rotated180
degrees, they become0
,1
,9
,8
, and6
respectively. - When
2
,3
,4
,5
, and7
are rotated180
degrees, they become invalid.
Note that after rotating a number, we can ignore leading zeros.
- For example, after rotating
8000
, we have0008
which is considered as just8
.
Given an integer n
, return true
if it is a confusing number, or false
otherwise.
Constraints
0 <= n <= 109
Solution
The problem Confusing Number
can be solved by rotating the given number and checking if it can be interpreted as a number other than the given number.
Implementation
static const int fast_io = []()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}();
class Solution
{
public:
bool confusingNumber(int n)
{
int rotate = 0;
string num = to_string(n);
for (int i = num.length(); i > 0; i--)
{
rotate *= 10;
if (num[i - 1] == '0' || num[i - 1] == '1' || num[i - 1] == '8')
rotate += num[i - 1] - '0';
else if (num[i - 1] == '6')
rotate += 9;
else if (num[i - 1] == '9')
rotate += 6;
else
return false;
}
return n != rotate;
}
};