題目:輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。
例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。
我的思路是計算每一位上1會出現在哪些數字中。
建乙個陣列a[n]放置每一位,從個位到最高位,0~n, 這裡n = 4。
a[0]=5, a[1]=0, a[2]=1, a[3]=4, a[4] = 2. 我們就說第0位是5,第4位是2.
第4位出現1,a[4]>1。則在10000到19999這些數內,也就是出現10^4次.
第3位出現1,a[3]>1。 把24105看成兩部分:2 4105,第一部分可能是0~2(也就是0,1,2),第二部分是1000~1999。
所有第4位出現1可能的情況是:
第一部分為0,就是1000~1999。
第一部分為1,11000~11999。
第一部分為2,21000~21999。
所以第4位出現1的次數為3 * 10^3。
第2位出現1,a[2] = 1。24 105,因為a[2] = 1,第一部分要分成兩種情況考慮。
第一部分0~23,第二部分100~199。
第一部分23,第二部分100~105。不能超過105,比如24 106就大於24105了。
所以第2位出現1的次數為(24 * 10^2 )+ (105-100 + 1).
第1位出現1,a[1] = 0。241 05。
第一部分0~240,第二部分10~19。
第一部分不能為241了。
所以第1位出現1的次數為241 * 10^1 .
第0位出現1,a[0] = 5。2410 5。
第一部分0~2410,第二部分1。
所以第0位出現1的次數為2411 * 10^0 .
所有加一下就是1出現的次數了。
第i位出現1,a[i]>1, 就直接(第一部分+1)* 10^i。a[i]=1或0,就把 第一部分相等的那種情況另外再考慮。
這道題還可以擴充套件為數2的個數,或其他數字的個數。區別就是在a[i]<=2(或其他)就要另外考慮了。
在從1到n的正數中1出現的次數
int count1in1ton int n return n int countnumber1 int n return count 程式設計之美上的方法 大體的思路是這樣的 假設n abcde,這裡a,b,c,d,e分別是十進位制數n的各個位數上的數字。如 果要計算百位上出現1的次數,它會受到三...
求在從1到n的正數中1出現的次數
題目 輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。問題描述 給定乙個十進位制正整數n,寫下從1開始,到n的所有整數,然後數一下其中出現的所有 1 的個數。例如 n 2,寫下1,2。這樣只出...
面試題32 在從1到n的正數中1出現的次數
1 方法一 class solution1 n n 10 return cnt int numberof1between1andn solution int n return cnt 2 方法二 使用遞迴的思路 class solution2 else if 1 len first digit 0 ...