侧边栏壁纸
博主头像
lac博主等级

行动起来,活在当下

  • 累计撰写 66 篇文章
  • 累计创建 12 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

总结一些自身的问题

Hude
2024-05-17 / 0 评论 / 0 点赞 / 22 阅读 / 1747 字

来看一道题目:传入一个number类型的数字,返回一个字符串,字符串要求从后往前,每三项以逗号间隔开(PS:才反应过来这是格式化余额...)

当时的思路:反向遍历,每三项填入一个逗号,最后再反向格式化,这思路不好评价,操作步骤繁琐,实现复杂

代码就不贴了,实在不堪入目。。。

当时过于紧张,导致大脑如同乱麻,回过头来想想,其实这是一个非常简单的问题,leetcode上刷了这么多题,居然思路还这样,辣鸡

正确思路:仔细想想,不难发现,数字长度大于3时,无非就这么两种情况:

  1. 数字长度除3取余数等于1,类似:'1,234'这种情况

  2. 数字长度除3取余数等于2,类似:'12,345'这种情况

那么可以发现,只要保证数字前三位逗号的放置情况,后面就是在此基础上取剩余数字的每三位填充到最终字符串而已

代码:

function demo(num){
    const numStr = num.toString();
    const start = numStr.length % 3
    let res = `${numStr.slice(0,start)}${start !== 0?',':''}`;
    for(let i = start; i < numStr.length; i++){
        res += numStr[i];
        if( i > start && ((i - start + 1) % 3 === 0)) {
            res += ',';
        }
    }
    console.log(res.slice(0,res.length-1));
}

甚至,由于确定了前三位的逗号情况后,后续字符的取值都是i到i+3,所以还可以优化为:

function demo(num){
    const numStr = num.toString();
    const start = numStr.length % 3
    let res = `${numStr.slice(0,start)}${start !== 0?',':''}`;
    for(let i = start; i < numStr.length; i+=3){
        res += numStr.slice(i,i+3) + ',';
    }
    console.log(res.slice(0,res.length-1));
}

评价:对概念的认识要结合练习来思考,需要对知识更核心的内容深掘和知识本质的探索,以确保不是死记硬背,而是真正理解,并且能够表达清晰,拓宽技术视野,计算机基础概念需要掌握

补充:希望能控制紧张的情绪,紧张的手掌通红,干!

0

评论区