問題描述:
求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?爲此他特別數了一下1~13中包含1的數字有一、十、十一、十二、13所以共出現6次,可是對於後面問題他就沒轍了。ACMer但願大家幫幫他,並把問題更加廣泛化,能夠很快的求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。code
筆記:io
public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count = 0; //最終返回的個數 int i = 1; //當前位數 int cur = 0, before = 0, after = 0; while (n/i != 0){ cur = n%(i*10)/i; //表示當前位上的數字 before = n/(i*10); //表示當前位前的數 after = n%i; //表示當前位後的數字 if (cur == 0){ //當前位0,如31010,百位上爲0,(0~30)*100種百位爲1的狀況 count += before*i; } else if (cur == 1){ //當前位爲1,如31110,百位上爲1,(0~30)*100+10+1種狀況 count += before*i + after+1; } else { //當前位大於1,如31400,百位上大於1,(0~31)*100種狀況 count += (before+1)*i; } i *= 10; //每次循環計算一位上出現1的狀況 } return count; } }