Welcome to Subscribe On Youtube

1056. Confusing Number

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 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, 68 is a valid number and 68 != 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

 

Constraints:

  • 0 <= n <= 109

Solutions

  • class Solution {
        public boolean confusingNumber(int n) {
            int[] d = new int[] {0, 1, -1, -1, -1, -1, 9, -1, 8, 6};
            int x = n, y = 0;
            while (x > 0) {
                int v = x % 10;
                if (d[v] < 0) {
                    return false;
                }
                y = y * 10 + d[v];
                x /= 10;
            }
            return y != n;
        }
    }
    
  • class Solution {
    public:
        bool confusingNumber(int n) {
            vector<int> d = {0, 1, -1, -1, -1, -1, 9, -1, 8, 6};
            int x = n, y = 0;
            while (x) {
                int v = x % 10;
                if (d[v] < 0) {
                    return false;
                }
                y = y * 10 + d[v];
                x /= 10;
            }
            return y != n;
        }
    };
    
  • class Solution:
        def confusingNumber(self, n: int) -> bool:
            x, y = n, 0
            d = [0, 1, -1, -1, -1, -1, 9, -1, 8, 6]
            while x:
                x, v = divmod(x, 10)
                if d[v] < 0:
                    return False
                y = y * 10 + d[v]
            return y != n
    
    
  • func confusingNumber(n int) bool {
    	d := []int{0, 1, -1, -1, -1, -1, 9, -1, 8, 6}
    	x, y := n, 0
    	for x > 0 {
    		v := x % 10
    		if d[v] < 0 {
    			return false
    		}
    		y = y*10 + d[v]
    		x /= 10
    	}
    	return y != n
    }
    
  • class Solution {
        /**
         * @param Integer $n
         * @return Boolean
         */
        function confusingNumber($n) {
            $d = [0, 1, -1, -1, -1, -1, 9, -1, 8, 6];
            $x = $n;
            $y = 0;
            while ($x > 0) {
                $v = $x % 10;
                if ($d[$v] < 0) {
                    return false;
                }
                $y = $y * 10 + $d[$v];
                $x = intval($x / 10);
            }
            return $y != $n;
        }
    }
    

All Problems

All Solutions