LeetCode: Confusing Number Posted on June 25, 2019July 26, 2020 by braindenny Confusing Number Similar Problems: CheatSheet: Leetcode For Code Interview CheatSheet: Common Code Problems & Follow-ups Tag: #hashmap, #rotatelist Given a number N, return true if and only if it is a confusing number, which satisfies the following condition: We can rotate digits by 180 degrees to form new digits. When 0, 1, 6, 8, 9 are rotated 180 degrees, they become 0, 1, 9, 8, 6 respectively. When 2, 3, 4, 5 and 7 are rotated 180 degrees, they become invalid. A confusing number is a number that when rotated 180 degrees becomes a different number with each digit valid. Example 1: Input: 6 Output: true Explanation: We get 9 after rotating 6, 9 is a valid number and 9!=6. Example 2: Input: 89 Output: true Explanation: We get 68 after rotating 89, 86 is a valid number and 86!=89. Example 3: Input: 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: 25 Output: false Explanation: We get an invalid number after rotating 25. Note: 0 <= N <= 10^9 After the rotation we can ignore leading zeros, for example if after rotation we have 0008 then this number is considered as just 8. Github: code.dennyzhang.com Credits To: leetcode.com Leave me comments, if you have better ways to solve. Solution: // https://code.dennyzhang.com/confusing-number // Basic Ideas: hashmap // Complexity: Time O(1), Space O(1) func confusingNumber(N int) bool { m := map[int]int{0:0, 1:1, 6:9, 8:8, 9:6} l1, l2 := []int{}, []int{} for N != 0 { v := N%10 _, ok := m[v] if !ok { return false } l1, l2 = append(l1, v), append(l2, m[v]) N = N/10 } for i, _ := range l1 { if l1[i] != l2[len(l1)-1-i] { return true } } return false } Post Views: 0