Dirección del título:
https://www.lintcode.com/problem/strobogrammatic-number/description
Dado un número entero en forma de cadena, juzgue rotarlo Si el número obtenido después de es igual a usted mismo.
Escriba un número adicional para determinar si los dos números son centralmente simétricos entre sí. Luego usa el doble puntero para juzgar todo el camino como el palíndromo. Si solo queda un número en el medio, también debe determinar si el número en sí es centrosimétrico. El código es el siguiente:
public class Solution {
/**
* @param num: a string
* @return: true if a number is strobogrammatic or false
*/
public boolean isStrobogrammatic(String num) {
// write your code here
int l = 0, r = num.length() - 1;
while (l < r) {
if (!rotate(num.charAt(l) - '0', num.charAt(r) - '0')) {
return false;
}
l++;
r--;
}
// 如果只剩一个数,判断一下这个数本身是否中心对称;否则直接返回true
if (l == r) {
char c = num.charAt(l);
return c == '0' || c == '1' || c == '8';
} else {
return true;
}
}
private boolean rotate(int x, int y) {
switch (x) {
case 0:
return y == 0;
case 1:
return y == 1;
case 2:
return y == 5;
case 5:
return y == 2;
case 6:
return y == 9;
case 8:
return y == 8;
case 9:
return y == 6;
default:
return false;
}
}
}
Complejidad de tiempo , es la longitud del número. Espacio 。