Categories:

Tags:



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, 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.

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;
    }
};