[Consulte Weizhi para uma pergunta diária] Greedy + Palindrome Number Arrangement - Construa um palíndromo através da metade dos números e, em seguida, julgue se ele atende ao significado da pergunta

564. Encontre o palíndromo mais próximo\textcolor{red}{564. Encontre o palíndromo mais próximo}5 6 4. Encontre o número palíndromo mais próximo _

Dada uma string representando um inteiro n, retorne o inteiro palíndromo mais próximo a ele (sem incluir ele mesmo). Se houver mais de um, devolva o menor.

"Mais próximo" é definido como o menor valor absoluto da diferença entre dois números inteiros .

class Solution {
    
    
    public String nearestPalindromic(String n) {
    
    
        Long m=Long.valueOf(n);
        if(m<=10){
    
    
            return String.valueOf(m-1);
        }
        long min=Long.MAX_VALUE;

        //100 -test 99
        long testNumber=(long)Math.pow(10,n.length()-1)-1;
        long s=testNumber-m;
        if(Math.abs(s)<Math.abs(min)){
    
    
            min=s;
        }
        testNumber=(long)Math.pow(10,n.length())+1;
        s=testNumber-m;
        if(Math.abs(s)<Math.abs(min)){
    
    
            min=s;
        }

        int leftN=(n.length()+1)/2;
        long left=Long.valueOf(n.substring(0,leftN));
        for(int i=-1;i<=1;i++){
    
    
            long midLeft=left+i;
            if(midLeft==0){
    
    
                midLeft=9;
            }
            long midRight=0;
            int countleftN=0;
            while(midLeft!=0){
    
    
                countleftN++;
                midRight=midRight*10+midLeft%10;
                midLeft/=10;
            }

            if(n.length()%2==0){
    
    
                testNumber=(long)(left+i)*(long)Math.pow(10,countleftN)+midRight;
            }
            else{
    
    
                testNumber=(long)(left+i)/10*(long)Math.pow(10,countleftN)+midRight;
            }
            System.out.println(testNumber);
            s=testNumber-m;
            if(s!=0&&Math.abs(s)<Math.abs(min)){
    
    
                min=s;
            }
        }
        return String.valueOf(m+min);
    }
}

fim

Fonte da pergunta: LeetCode link: https://leetcode-cn.com/problems

⭐️Siga o autor, leve você para escovar as perguntas e aprenda as habilidades de algoritmo mais usadas a partir de perguntas simples de algoritmo (uma pergunta por dia durante as férias de inverno) ⭐️Siga o autor para
escovar as perguntas - do simples ao avançado, permite torne-se uma máquina implacável para escovar perguntas sem saber, se você tiver alguma dúvida, envie uma mensagem privada

Acho que você gosta

Origin blog.csdn.net/caqjeryy/article/details/123242512
Recomendado
Clasificación