跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 一道怀疑人生的算法题,就这?
未分類
22 7 月 2020

一道怀疑人生的算法题,就这?

一道怀疑人生的算法题,就这?

資深大佬 : YadongZhang 3

1234567890 -> ‘1,234,567,890’

P.S. 考虑兼容性和性能问题

我写的代码:

function numToStr(num) {  // STEP 1: type conversion    let tempStr = String(num)   // STEP 2: modular -> 3    let m = tempStr.length % 3   // STEP 3: slice -> '1 | 234567890'    let part1 = `${tempStr.slice(0, m)},`  let tempPart2 = tempStr.slice(m), part2 = ''   // STEP 4: split -> '234,567,890'    for (let i = 0; i < tempPart2.length; i++) {   if (i > 0 && i % 3 === 0) {    part2 += ','   }   part2 += tempPart2.charAt(i)  }   // STEP 5: combine -> '1,234,567,890'    let str = part1 + part2   return str }  const number = 1234567890 numToStr(number) // '1,234,567,890' 

专业程序员的解法

function numberWithCommas(x) {     return x.toString().replace(/B(?=(d{3})+(?!d))/g, ","); } 

大佬有話說 (24)

  • 資深大佬 : seki

    这种题不用想太多,差不多和茴的几种写法一样,见过的用过的就能想到。不过反正至少你也学到了,不亏

  • 資深大佬 : zhouyg

    常规操作

  • 資深大佬 : JeffGe

    function numberWithCommas(x) {
    return x.toString().split(”)
    .map((s, i, arr) => (arr.length – i – 3) % 3 == 1 ? s + ‘,’ : s)
    .join(”);
    }

    会正则还是厉害

  • 資深大佬 : yuzo555

    number_format(1234567890)

    这时候就体现出 PHP 的开发效率了

  • 資深大佬 : Kaciras

    这种题你不知道环视肯定只能循环。

    其实很多正则教程都把这题当例子讲的。

  • 資深大佬 : rabbbit

    console.log((1234567890).toLocaleString());

  • 資深大佬 : yhxx

    让你更怀疑人生的:

    const num = 1234567890;
    console.log(num.toLocaleString());

  • 主 資深大佬 : YadongZhang

    @seki #1 算法考的都是没见过的才能体现出水平,哈哈

    @JeffGe #3 强,学到了

    @Kaciras #5 正则基本不会

    @rabbbit #6
    @yhxx #7 注意兼容性和性能问题,不过我是真没想到

  • 資深大佬 : seki

    @YadongZhang 这题目其实都也谈不到什么算法技巧,正式算法题都不靠这种「啊哈哈能用正则来一行搞定」的东西来体现水平的

  • 主 資深大佬 : YadongZhang

    @seki 可能面试官根据我的水平出的。。。

  • 資深大佬 : baka

    毕竟是算法题,本来正经 O(n)就能解决。正则 NFA 匹配需要 O(nm),DFA 构造需要 O(2^n)。

  • 資深大佬 : xiadong1994

    用正则还叫考虑性能?

  • 資深大佬 : billlee

    我怎么怀疑这个正则性能可能比手写的还差

  • 資深大佬 : also24

    @rabbbit #6
    @yhxx #7
    你们这个方法就需要考虑兼容性问题了,最好加个 locales 参数指定一下语言(格式),不然容易出现其它结果。
    参见: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

    顺便说一句,4 @yuzo555 用 php 的内置的 number_format 就没问题,因为那个方法不论什么区域,都是按照 千分位,加 “,” 来处理的,不过需要注意的是默认是不管小数部分的。
    参见: https://www.php.net/manual/en/function.number-format.php

  • 資深大佬 : seki

    @YadongZhang 我倒没有这个意思。就是提醒你刷算法题的话不用太纠结于这种类型的题,把那些基本题型掌握好更重要。水平之类的想法也不用太多,说不定面试官就是正好题库里面有这么一道题。

    当然这种题就算是不用正则的写法,也是有很多种解答的,这个是可以自己琢磨,改进代码风格的

  • 資深大佬 : yanguango

    不用考虑国际化的吗,有些国家就不是用逗号的。如果是 JS 就用 toLocaleString

  • 資深大佬 : cmqwan

    要写正则时,一般对着百度百科里面到底语法写

  • 資深大佬 : ytmsdy

    大兄弟,这不叫算法题。
    在 acm 里面这玩意儿叫模拟题,基本上属于白送的类型!

  • 資深大佬 : ZehaiZhang

    对着谷歌写正则+1
    另外这题目也不算是算法

  • 資深大佬 : zy445566

    正则性能未必就有手写得好,leetcode 就有很多正则过不去,手写妥妥的题

  • 資深大佬 : zoeliu

    正则表达式性能很差,这两种也不算什么是否专业的差距。
    可以专门学一下正则,但不需要全部记住,用的时候能查能用即可。

  • 主 資深大佬 : YadongZhang

    @baka #11 大佬大佬,KMP 里看到 DFA 完全不懂,羡慕对算法掌握这么深的
    @seki #15 自己菜咱得承认,其实很少有人说真话的,听点真话进步快
    @ytmsdy #18 我这智商跟 ACM 无缘,能做个模拟题已经很成功了

  • 資深大佬 : Messiahhh

    零宽断言表示一个位置,over

  • 主 資深大佬 : YadongZhang

    @Messiahhh #23 听都没听过,over

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具