題目描述:
輸入一個整數 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 < 1)return 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;
}
(完)