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

本文介绍了一种寻找给定数字最近回文数的算法。通过分析数字长度和中间部分,生成等于、大于和小于目标的回文数,比较距离返回最近者。适用于编程竞赛和面试准备。
jiage666原创博客,转载请申明
原始地址:https://www.cnblogs.com/jiage666/p/9745784.html
class Solution:
    def nearestPalindromic(self, n):
        """
        :type n: str
        :rtype: str
        """
        b=list(n)
        c=list(n)
        e=list(n)
        l=len(n)
        if (l%2==0):
            mid=l//2
        else:
            mid=l//2+1


        if (int(n)<=10):
            return (str(int(n)-1))

        if n=='11':
            return ('9')

        else:
            #equal
            for x in range(mid):
                if (b[x]!=b[l-x-1]):
                    b[l-x-1]=b[x]
            f=''.join(b)
            #print(f)
            
            #larger
            d=str(int(n[0:mid])+1)
            if len(d)>mid:
                c.append('0')
                for y in range(len(d)):
                    c[y]=d[y]
                    if (c[y]!=c[l-y]):
                        c[l-y]=c[y]
            else:
                for y in range(len(d)):
                    c[y]=d[y]
                    if (c[y]!=c[l-y-1]):
                        c[l-y-1]=c[y]
            g=''.join(c)
            #print(g)

            #smaller
            d=str(int(n[0:mid])-1)
            if len(d)<mid:
                e.pop()
                for z in range(len(d)):
                    e[z]=d[z]
                    if (e[z]!=e[l-z-2]):
                        e[l-z-2]=e[z]
                e[len(d)]=d[len(d)-1]
            else:
                for z in range(len(d)):
                    e[z]=d[z]
                    if (e[z]!=e[l-z-1]):
                        e[l-z-1]=e[z]
            h=''.join(e)
            #print(h)
        #print('***************************')
        rf=abs(int(f)-int(n))
        rg=abs(int(g)-int(n))
        rh=abs(int(h)-int(n))
        if f==n:
            if (rg<rh):
                return (g)
            else:
                return (h)

        else:
            if rf==rh:
                return (str(min(int(f),int(h))))
            else:
                r=[rf,rg,rh]
                t=r.index(min(r))
                if t==0:
                    return (f)
                elif t==1:
                    return (g)
                else:
                    return (h)
jiage666原创博客,转载请申明
原始地址:https://www.cnblogs.com/jiage666/p/9745784.html

 

转载于:https://www.cnblogs.com/jiage666/p/9745784.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值