Orion's Studio.

算法(37)-回文数总结

2024/03/15

回文数

动态规划

所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的。

时间复杂度:O(n^2)
空间复杂度:O(n^2)

双指针法

在遍历中心点的时候,要注意中心点有两种情况,也就是奇数和偶数的场景。

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function func(str) {
const len = str.length;
let res = '';
for(let i = 0; i < 2 * len - 1; i++) {
let left = Math.floor(i / 2);
let right = left + i % 2;
let temp = left === right ? -1 : 0;
while(left >= 0 && right < len && str[left] === str[right]) {
left--;
right++;
temp+=2;
}
}
}

时间复杂度:O(n^2)
空间复杂度:O(1)

回文数的判定

纯数字

1
2
3
4
5
6
7
8
9
10
11
12
function reverse(n) {
let res = 0;
while (n > 0) {
res = 10 * res + (n % 10);
n = Math.floor(n / 10);
}
return res;
}

function isPlindrome(n) {
return n === reverse(n);
}
CATALOG
  1. 1. 回文数
    1. 1.1. 动态规划
    2. 1.2. 双指针法
  2. 2. 回文数的判定
    1. 2.1. 纯数字