美文网首页让前端飞Web前端之路
打印出 1 - 10000 之间的所有对称数

打印出 1 - 10000 之间的所有对称数

作者: 青山旁小溪边 | 来源:发表于2019-11-05 09:07 被阅读0次

问题

打印出 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
    }
}

相关文章

网友评论

    本文标题:打印出 1 - 10000 之间的所有对称数

    本文链接:https://www.haomeiwen.com/subject/oktsbctx.html