美文网首页让前端飞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