233 數字 1 的個數

2022-05-08 22:09:09 字數 758 閱讀 5209

給定乙個整數 n,計算所有小於等於 n 的非負整數中數字 1 出現的個數。

示例:輸入: 13

輸出: 6

解釋: 數字 1 出現在以下數字中: 1, 10, 11, 12, 13 。

遞迴解決。分為首位為1和首位不為1兩種情況:

1.首位為1,如12345。

先考慮大於等於10000的:則10000~12345的首位1共貢獻2346個,另外0到2345貢獻的後4位的1的總數遞迴解決:f(2345)。

再考慮小於10000的:遞迴解決:f(9999)

2.首位不為1,如23456。

首位的1貢獻10000個(10000~19999)。然後後面4位:再分為,1:大於等於20000的:0~3456,f(3456)個。2:小於20000的:0~9999 和 10000到19999,一共2*f(9999)

1

class

solution

5string s=to_string(n);

6int high=s[0]-'0'

;7int p=int(pow(10,s.size()-1

));8 s.erase(0,1);9

int low=atoi(s.c_str());

10if(high==1)13

else16}

17 };

233 數字1的個數

給定乙個整數 n,計算所有小於等於 n 的非負整數中數字 1 出現的個數。示例 輸入 13輸出 6解釋 數字 1 出現在以下數字中 1,10,11,12,13 最開始想到的是暴力,但是暴力應該是過不了的。即是 把每乙個數字的裡1的個數都算出來再加起來就是答案 後來我改進了一下,但是還是超出時間和空間...

233 數字 1 的個數

給定乙個整數 n,計算所有小於等於 n 的非負整數中數字 1 出現的個數。示例 輸入 13 輸出 6 解釋 數字 1 出現在以下數字中 1,10,11,12,13 思路 統計出每一的位上1出現的個數,累加起來就是1出現的總個數。num 31456 現在統計百位上1出現的次數。將num分成兩部分 根據...

233 數字 1 的個數 hard

給定乙個整數 n,計算所有小於等於 n 的非負整數中數字 1 出現的個數。示例 輸入 13 輸出 6 解釋 數字 1 出現在以下數字中 1,10,11,12,13 分別計算在個十百千。位上1出現的次數 在某個位置上如果是0,那麼1出現的次數 它的高位x它的位數 如果某個位置上是1,那麼1出現的次數 ...