劍指offer(31)1到n中n出現的次數

2021-09-18 06:50:49 字數 1217 閱讀 7324

題目描述:求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。

思路:(1)將所有數合併到乙個字串中,並按每個字元拆分到char型別陣列中,一次比較每個字元與1是否相等。

(2)依次考察每個數,不斷除10,判斷每一位是否為1.

(3)遞迴,總結規律

**:(1)

public class solution 

}n--;

}return count;

}}

**:(2)

public class solution 

int count = 0;

for(int i = 1; i <= n; i++)

return count;

}public int countone(int i)

i /= 10;

}return count;

}}

**:(3)

public class solution 

int len = getlenofnum(n);

if(len == 1)

int tmp1 = powerbaseof10(len - 1);

//最高位

int first = n / tmp1;

//如果最高位是1,則最高位為1的數量為除去最高位剩下的數 + 1;不是的話則為10^剩餘位數

int firstonenum = first == 1 ? n % tmp1 + 1 : tmp1;

int otheronenum = first * (len - 1) * (tmp1 / 10);

//加上剩餘部分

return firstonenum + otheronenum + numberof1between1andn_solution(n % tmp1);

}public int getlenofnum(int num)

return len;

}//10的base次方

public int powerbaseof10(int base)

}

劍指offer(31)1 n整數中1出現的次數

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。這題說實話挺難的,...

劍指offer 列印1到最大n位數

面試題12 題目 輸入數字n,按照順序答應出從1最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的三位數即999。對於這道題進行時,咱們會進行一些分析,當你輸入3時,最大的三位數是999,這就是說這個最大的數是9 10 n 1 9 10 n 2 9 10 0。所以在這我想學習c語言的初...

n個骰子 劍指offer

暴力求解,n個骰子和為s就等於n 1個骰子和分別為s 1 s 6時次數的總和。據此寫出 如下 int baoli int n,int s int count 0 count baoli n 1,s 1 baoli n 1,s 2 baoli n 1,s 3 baoli n 1,s 4 baoli n...