1から400までのすべての数に含まれる1の数を出力してください

トピック

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())

おすすめ

転載: blog.csdn.net/SmallTeddy/article/details/108704476