Given a string num
which represents an integer, return true
if num
is a strobogrammatic number.
A strobogrammatic number is a number that looks the same when rotated 180
degrees (looked at upside down).
Example 1:
Input: num = "69" Output: true
Example 2:
Input: num = "88" Output: true
Example 3:
Input: num = "962" Output: false
Example 4:
Input: num = "1" Output: true
Constraints:
1 <= num.length <= 50
num
consists of only digits.num
does not contain any leading zeros except for zero itself.
class Solution:
def isStrobogrammatic(self, num: str) -> bool:
def match(a, b):
if a in {'0', '1', '8'}:
return a == b
if a == '6':
return b == '9'
if a == '9':
return b == '6'
return False
n = len(num)
i, j = 0, n - 1
while i <= j:
if not match(num[i], num[j]):
return False
i += 1
j -= 1
return True
class Solution {
public boolean isStrobogrammatic(String num) {
int n = num.length();
for (int i = 0, j = n - 1; i <= j; ++i, --j) {
if (!match(num.charAt(i), num.charAt(j))) return false;
}
return true;
}
private boolean match(char a, char b) {
switch (a) {
case '0':
case '1':
case '8':
return a == b;
case '6':
return b == '9';
case '9':
return b == '6';
default:
return false;
}
}
}