# repeat
# Description
重复 N 次给定字符串
# Params
(string, n)
# Return
string
# Code
function repeat(string, n) {
let result = ''
if (!string || n < 1 || n > Number.MAX_SAFE_INTEGER) {
return result
}
// Leverage the exponentiation by squaring algorithm for a faster repeat.
// See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
do {
if (n % 2) {
result += string
}
n = Math.floor(n / 2)
if (n) {
string += string
}
} while (n)
return result
}
# Analyze
- 一开始做了参数合规化的处理,如果 n < 1 或者 n > Number.MAX_SAFE_INTEGER ,或者没有传入 string ,都返回空字符串
- 以快速幂算法来进行字符串的拼接
- 字符串拼接的本质,就是相当于求一个数的幂,只不过幂是乘法,这里换成加法拼接即可
- 所以根据快速幂算法,这里代码可以改成
function repeat1(string, n) {
let result = ''
if (!string || n < 1 || n > Number.MAX_SAFE_INTEGER) {
return result
}
while (n) {
(n & 1) && (result += string)
n >>= 1
n && (string += string)
}
return result
}
这里借鉴了
# Remark
# Example
console.log(repeat('ab', 4)) // abababab