题目链接:https://leetcode-cn.com/problems/find-the-closest-palindrome/

前言:每次要开组会前就焦虑得要命,其实也只是汇报工作,但开完也还是会松一口气。罢了,有空便写博客,没空便只刷题,也没耽误太多。

一. 函数

1.string转成long类型

long t = Long.parseLong(s.substring(0, (n + 1) / 2));

2.long的范围是超过10的18次方的。

二. 题解思路

构造回文整数有一个直观的方法:用较高位的数字替换其对应的较低位。

构造的回文整数大于原数时,我们可以减小该回文整数的中间部分,以缩小回文整数和原数的差距。例如,对于数 932,我们将构造出回文整数 939,实际上 929 更接近原数。

当我们减小构造的回文整数时,可能导致回文整数的位数变化。例如,对于数 100100,我们将构造出回文整数 101101,减小其中间部分将导致位数减少。得到的回文整数形如  999…999。
构造的回文整数小于原数时,我们可以增大该回文整数的中间部分,以缩小回文整数和原数的差距。例如,对于数 239,我们将构造出回文整数 232,实际上 242 更接近原数。

当我们增大构造的回文整数时,可能导致回文整数的位数变化。例如,对于数 998998,我们将构造出回文整数 999999,增大其中间部分将导致位数增加。得到的回文整数形如 100…001。

构造的回文整数等于原数时,由于题目约定,我们需要排除该回文整数,在其他的可能情况中寻找最近的回文整数。

考虑到以上所有的可能,我们可以给出最终的方案:分别计算出以下每一种可能的方案对应的回文整数,在其中找到与原数最近且不等于原数的数即为答案。

用原数的前半部分替换后半部分得到的回文整数。

用原数的前半部分加一后的结果替换后半部分得到的回文整数。

用原数的前半部分减一后的结果替换后半部分得到的回文整数。

为防止位数变化导致构造的回文整数错误,因此直接构造 999…999 和 100…001 作为备选答案。

三. 心得

真的是对着题目思考了很久,只想到了直接调转前半数字的方法,但直觉这道题不会这么简单,于是卡在了这里。看了题解之后只能说,自己需要努力的还太多了。共勉。

posted on 2022-03-02 16:40  SelmaS  阅读(74)  评论(0编辑  收藏  举报