題目描述:求出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...