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

2020-07-20 19:39:14 +08:00
 YadongZhang

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, ",");
}
4138 次点击
所在节点    职场话题
24 条回复
zoeliu
2020-07-21 11:07:16 +08:00
正则表达式性能很差,这两种也不算什么是否专业的差距。
可以专门学一下正则,但不需要全部记住,用的时候能查能用即可。
YadongZhang
2020-07-21 11:12:29 +08:00
@baka #11 大佬大佬,KMP 里看到 DFA 完全不懂,羡慕对算法掌握这么深的
@seki #15 自己菜咱得承认,其实很少有人说真话的,听点真话进步快
@ytmsdy #18 我这智商跟 ACM 无缘,能做个模拟题已经很成功了
Messiahhh
2020-07-21 20:14:16 +08:00
零宽断言表示一个位置,over
YadongZhang
2020-07-21 20:32:00 +08:00
@Messiahhh #23 听都没听过,over

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/691691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX