トピック
1から400までのすべての数値に含まれる1の数を出力してください。たとえば、数値1は1を含み、数値11は2を含み、数値20は1を含まず、数値1から21は合計で13を含みます。 1。
function getCount() {
}
// 输出 180
console.log(getCount())
回答
答える
この答えはより古典的で、パフォーマンスはかなり良いです。
const sum1s = num => {
let numstr
if (!num) return 0
if (typeof num === 'string') numstr = num
else numstr = String(num)
if (Number(numstr) === 0) return 0
const curr =
numstr[0] > 1
? 10 ** (numstr.length - 1) +
numstr[0] * (numstr.length - 1) * 10 ** (numstr.length - 2)
: sum1s(10 ** (numstr.length - 1) - 1) + 1
return curr + sum1s(numstr.substr(1))
}
// 输出 180
console.log(sum1s(400))
2つ回答
これは通常を使用しますが、長い文字列の場合、通常のパフォーマンスは少し悪い場合があります
function countOne(num){
// num为正整数,方法有点儿暴力
return Array.from({
length:num},(v,i)=>i+1).join('').replace(/[^1]/g,'').length
}
console.log(countOne(400))
3つ回答
次の答えは満足のいくものと見なされます。各数値を文字列に変換し、1の数を数えます。
function getCount() {
let count = 0
for(let i=1;i<400;i++) {
count = count + `${
i}`.split('1').length - 1
}
return count
}
// 输出 180
console.log(getCount())