【Lintcode】 644. Número estrobogramático

Dirección del título:

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

Dado un número entero en forma de cadena, juzgue rotarlo 180 ° 180 \ grados 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 El ( norte ) O (n) norte norte es la longitud del número. Espacio El ( 1 ) O (1)

Publicado 388 artículos originales · me gustaron 0 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_46105170/article/details/105355778
Recomendado
Clasificación