劍指offer: 整數中1出現的次數(從1到n整數中1出現的次數)

問題描述:
求出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;
    }
}
相關文章
相關標籤/搜索