タイトルアドレス:
https://www.lintcode.com/problem/strobogrammatic-number/description
文字列の形式の整数を指定して、それを回転させると判断します 後に取得した数が自分と等しいかどうか。
追加の数値を書き込んで、2つの数値が互いに中心的に対称であるかどうかを判断します。次に、ダブルポインターを使用して回文のように判断します。中央に1つの数値しか残っていない場合は、数値自体が中心対称であるかどうかを判別する必要もあります。コードは次のとおりです。
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;
}
}
}
時間の複雑さ 、 は数値の長さです。宇宙 。