【劍指offer】43、1~n整數中1出現的次數
阿新 • • 發佈:2018-07-21
ase 表示 eight pre pub 題目 我們 return 1出現的次數
題目
輸入一個整數,求1~n的整數十進制表示中1出現的次數。如12,有1,10,11,12,總共出現了5次。
思路
註意不是統計出現1的數字的多少,而是統計1出現了幾次。
我們按位來分析
個位:
如果weight=0,則個位出現1的次數 = round
如果weight>=1,則個位出現1的次數=round + 1
十位:
如果weight=0,則次數 = round * base
如果weight=1,則次數 = round * base + former + 1 ( former = n % base )
如果weight>1,則次數 = round * base + base
百位:和十位一樣
例如534 = 個位 + 十位 + 百位 = (53*1 +1) + (5*10+10) + (0*100 + 100) =214
2105 = (210*1+1) + (21*10) + (2*100+ 2105%100 + 1) + (0*1000 + 1000) = 3517
class Solution { public: int NumberOf1Between1AndN_Solution(int n) { if(n < 1) return 0; int count = 0, base = 1, round = n;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; } };
【劍指offer】43、1~n整數中1出現的次數