劍指Offer之1~n的整數中1出現的次數

題目描述:

輸入一個整數 n ,求1~n這n個整數的十進制表示中1出現的次數。例如,輸入12,1~12這些整數中包含1 的數字有1、10、11和12,1一共出現了5次。


思路分析:

常規思路是輸入一個整數n,循環判斷每個數字中1的個數,然後累加起來,但是這樣在n比較大的時候,會超時,這裏分享一個不錯的思路:思路


參考代碼:

public int countDigitOne(int n) {
  if(n < 1return 0;
  int round = n;
  int base = 1;
  int count = 0;
  while(round > 0){
     int weight = round % 10;
     round /= 10;
     count += round * base;
     if(weight == 1)count += n % base + 1;
     else if(weight > 1) count += base;
     base *= 10;
  }
  return count;
}

(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章