Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
编程世界总是离不了算法
最近在看框架源码时,会有很多算法的实现逻辑,有时候会感到吃力
于是决定蹭着假期,加强算法和数据结构相关的知识
那怎么提升呢?
其实我知道算法这东西没有捷径,多写多练才能提升,于是我开启我的LeetCode刷题之旅
第一阶段目标是:200道,每天1到2篇
为了不乱,本系列文章目录分为三部分:
- 今日题目:xxx
- 我的思路
- 代码实现
今天题目:564. 寻找最近的回文数
给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。
“最近的”定义为两个整数差的绝对值最小。
示例 1:
输入: n = "123" 输出: "121" 示例 2:
输入: n = "1" 输出: "0" 解释: 0 和 2是最近的回文,但我们返回最小的,也就是 0。
提示:
1 <= n.length <= 18 n 只由数字组成 n 不含前导 0 n 代表在 [1, 1018 - 1] 范围内的整数
我的思路
模拟数字的+1和-1过程,再判断是否是回文,返回最快成为回文的字符串 基本思路只+1和-1的话很明显会超时,那么我们可以放大1这个值
比如1231,我们可以+10和-10,最终得到1331和1221,再根据题意获取最近的值即可
代码实现
var nearestPalindromic = function (n) {
const bit = BigInt(n);
const nums = [bit - 1n, bit + 1n];
while (true) {
const d1 = getDistance(nums[0]);
if (d1 === 0) break;
nums[0] -= BigInt(d1);
}
while (true) {
const d2 = getDistance(nums[1]);
if (d2 === 0) break;
nums[1] += BigInt(d2);
}
return bit - nums[0] <= nums[1] - bit ? String(nums[0]) : String(nums[1])
};
function getDistance(n) {
const s = n + '';
let i = 0;
let j = s.length - 1;
while (i < j) {
if (s[i++] !== s[j--]) return 10 ** (i - 1);
}
return 0;
}
总结
实现方式其实有很多,这里仅供参考~
由于刚开始刷题,也不知道从哪里刷好,如果前辈们有好的建议,希望不吝赐教,感谢🌹