问题
打印出 1 - 10000 之间的所有对称数 例如:121、1331 等
思路
看到题目大部分人首先想到的是循环10000个数字通过比较来筛选所有对称的数字,但是这样对于性能来说开销比较大,其实还有另一种方式来进行解决,利用对称数。
答案
-
循环10000次解题
这个循环有很多方式来解决,就不一一列举了
[...Array(10000).keys()].map(x=>x+1).filter((x) => {
return x.toString().length > 1 && x === Number(x.toString().split('').reverse().join(''))
})
-
利用对称数
以10000 为例,列出所有位数的对称数,比如1位数的 对称数, 2位数的对称数...到5位数, 再判断是否小于10000。
对称数生成 : 遍历最长位数(如5位)。 每个位置遍历 0 - 9,对称即可。
var result = [];
for(let i=1;i<10;i++){
result.push(i*11); // 两位数的对称数
for(let j=0;j<10;j++){
result.push(i*101+j*10) // 三位数的对称数
result.push(i*1001+j*110) // 四位数的对称数,当i和j均为9是值为9999
}
}
网友评论