什么是正则的捕获型分组和非捕获型分组,什么是引用和反向引用,什么是零宽断言和负向零宽断言,用正则、迭代(栈)和递归 3 种算法求解《1556. 千位分隔数》
()
=> $1, $2, $3 ...
(?:)
=> 仅分组,不捕获$1
\1
(?=exp)
(?<=exp)
(?!exp)
(?<!exp)
test
exec
match
search
replace
split
给你一个整数 n,请你每隔三位添加点(即 "." 符号)作为千位分隔符,并将结果以字符串格式返回。
var thousandSeparator = function(n) {
return (n + '').replace(/(?!^)(?=(\d{3})+$)/g, '.')
};
golang
不支持零宽断言和负向零宽断言
var thousandSeparator = function(n) {
const stack = [], r = []
let i = 0
do {
stack.push(n % 10)
n /= 10
n |= 0
if (++i % 3 === 0 && n !== 0) stack.push('.')
} while (n)
while (stack.length) r.push(stack.pop())
return r.join('')
};
import "strconv"
func thousandSeparator(n int) string {
if n == 0 {
return "0"
}
i, r := 0, ""
for n > 0 {
r = strconv.Itoa(n % 10) + r
n /= 10
i++
if i % 3 == 0 && n != 0 {
r = "." + r
}
}
return r
}
var thousandSeparator = function(n) {
return d(n + '')
};
const d = s => {
const n = s.length
if (n <= 3) return s
return d(s.slice(0, -3)) + '.' + s.slice(-3)
}
import "strconv"
func thousandSeparator(n int) string {
return d(strconv.Itoa(n))
}
func d(s string) string {
n := len(s)
if n <= 3 {
return s
}
return d(s[:n - 3]) + "." + s[n - 3:]
}