【Lintcode】644。ストロボグラム数

タイトルアドレス:

https://www.lintcode.com/problem/strobogrammatic-number/description

文字列の形式の整数を指定して、それを回転させると判断します 180 ° 180 \程度 後に取得した数が自分と等しいかどうか。

追加の数値を書き込んで、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;
        }
    }
}

時間の複雑さ O(n) は数値の長さです。宇宙 1 O(1)

公開された388元の記事 ウォンの賞賛0 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_46105170/article/details/105355778
おすすめ