Skip to content

Latest commit

 

History

History
86 lines (68 loc) · 3.25 KB

README.md

File metadata and controls

86 lines (68 loc) · 3.25 KB

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.

 

Example 1:

Input: n = 6
Output: true
Explanation: We get 9 after rotating 6, 9 is a valid number, and 9 != 6.

Example 2:

Input: n = 89
Output: true
Explanation: We get 68 after rotating 89, 86 is a valid number and 86 != 89.

Example 3:

Input: n = 11
Output: false
Explanation: We get 11 after rotating 11, 11 is a valid number but the value remains the same, thus 11 is not a confusing number

Example 4:

Input: n = 25
Output: false
Explanation: We get an invalid number after rotating 25.

 

Constraints:

  • 0 <= n <= 109

Companies:
Google

Related Topics:
Math

Similar Questions:

Solution 1.

// OJ: https://leetcode.com/problems/confusing-number/
// Author: github.com/lzl124631x
// Time: O(lgN)
// Space: O(1)
class Solution {
public:
    bool confusingNumber(int n) {
        int m[10] = {0,1,-1,-1,-1,-1,9,-1,8,6}, r = 0, num = n;
        while (n) {
            if (m[n % 10] == -1) return false;
            r = r * 10 + m[n % 10];
            n /= 10;
        }
        return num != r;
    }
};