2022-02-17:寻找最近的回文数。 给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。 “最近的”定义为两个整数差的绝对值最小。 示例 1: 输

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-02-17:寻找最近的回文数。 给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。 “最近的”定义为两个整数差的绝对值最小。 示例 1: 输相关的知识,希望对你有一定的参考价值。

2022-02-17:寻找最近的回文数。
给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。
“最近的”定义为两个整数差的绝对值最小。
示例 1:
输入: n = “123”;
输出: “121”。
力扣564。

答案2022-02-17:

粗回文,中间位置加1或减1或不变。coding难点在进位和借位。

代码用golang编写。代码如下:

package main

import (
    "fmt"
    "strconv"
)

func main() 
    n := "123"
    ret := nearestPalindromic(n)
    fmt.Println(ret)


func nearestPalindromic(n string) string 
    num, _ := strconv.Atoi(n)
    raw := getRawPalindrome(num)
    big := 0
    if raw > num 
        big = raw
     else 
        big = getBigPalindrome(raw)
    
    small := 0
    if raw < num 
        small = raw
     else 
        small = getSmallPalindrome(raw)
    
    if big-num >= num-small 
        return fmt.Sprint(small)
     else 
        return fmt.Sprint(big)
    


func getRawPalindrome(n int) int 
    chs := []byte(fmt.Sprint(n))
    len0 := len(chs)
    for i := 0; i < len0/2; i++ 
        chs[len0-1-i] = chs[i]
    
    ret, _ := strconv.Atoi(string(chs))
    return ret


func getBigPalindrome(raw int) int 
    chs := []byte(fmt.Sprint(raw))
    res := make([]byte, len(chs)+1)
    res[0] = '0'
    for i := 0; i < len(chs); i++ 
        res[i+1] = chs[i]
    
    size := len(chs)
    for j := (size-1)/2 + 1; j >= 0; j-- 
        res[j]++
        if res[j] > '9' 
            res[j] = '0'
         else 
            break
        
    
    offset := 0
    if res[0] == '1' 
        offset = 1
    
    size = len(res)
    for i := size - 1; i >= (size+offset)/2; i-- 
        res[i] = res[size-i-offset]
    
    ret, _ := strconv.Atoi(string(res))
    return ret


func getSmallPalindrome(raw int) int 
    chs := []byte(fmt.Sprint(raw))
    res := make([]byte, len(chs))
    size := len(res)
    for i := 0; i < size; i++ 
        res[i] = chs[i]
    
    for j := (size - 1) / 2; j >= 0; j-- 
        res[j]--
        if res[j] < '0' 
            res[j] = '9'
         else 
            break
        
    
    if res[0] == '0' 
        res = make([]byte, size-1)
        for i := 0; i < len(res); i++ 
            res[i] = '9'
        
        if size == 1 
            return 0
         else 
            ret, _ := strconv.Atoi(string(res))
            return ret
        
    
    for k := 0; k < size/2; k++ 
        res[size-1-k] = res[k]
    
    ret, _ := strconv.Atoi(string(res))
    return ret

执行结果如下:


左神java代码

以上是关于2022-02-17:寻找最近的回文数。 给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。 “最近的”定义为两个整数差的绝对值最小。 示例 1: 输的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 564.寻找最近的回文数

564. 寻找最近的回文数

LeetCode 6. Z 字形变换 / 564. 寻找最近的回文数 / 258. 各位相加

leetcode------564. 寻找最近的回文数

寻找下一个回文

洛谷——P1609 最小回文数