[LintCode] Mirror Numbers
A mirror number is a number that looks the same when rotated 180 degrees (looked at upside down).
Write a function to determine if a number is mirror. The number is represented as a string.
Example
For example, the numbers "69", "88", and "818" are all mirror numbers.
Given num = "69"
return true
Given num = "68"
return false
The allowed mapping is:
6 -> 9
9 -> 6
0 -> 0
1 -> 1
8 -> 8
Use a hash map to store the above mapping and go through the input string. If a character has no mappings or
its mapped character is not the same with the character at its symmetric right side , return false.
1 public class Solution { 2 public boolean isStrobogrammatic(String num) { 3 Map<Character, Character> map = new HashMap<Character, Character>(); 4 map.put('6', '9'); 5 map.put('9', '6'); 6 map.put('0', '0'); 7 map.put('1', '1'); 8 map.put('8', '8'); 9 int left = 0, right = num.length() - 1; 10 while (left <= right) { 11 if (!map.containsKey(num.charAt(left))) { 12 return false; 13 } 14 if (map.get(num.charAt(left)) != num.charAt(right)) { 15 return false; 16 } 17 left++; 18 right--; 19 } 20 return true; 21 } 22 }
Related Problems
[LeetCode]Strobogrammatic Number II
[LeetCode]Strobogrammatic Number III