經典演算法 Number of Digit One

2021-07-10 22:48:23 字數 1212 閱讀 999

for example:

given n = 13,

return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

一、題目描述:

給定乙個十進位制正整數n,寫下從1開始,到n的所有整數,然後統計其中出現的所有「1」的個數。

例如:n=13.

其中包含1的數字有1,10,11,12,13,一共有6個「1」,所以輸出結果為6.

二、解題思路:

方法1:從1開始遍歷到n,將其中每乙個數中含有「1」的個數加起來,就會得到從1到n所有「1」的個數的和。

但是這種方法的時間複雜度為nlogn,當n較大時,執行時間會很長。

方法2:利用數學歸納法,直接對n進行分析,歸納總結規律

例如n=abcde五位數,我們分析百位的c,主要有以下三種情況:

1)當c == 0的時候,比如13013,此時百位出現1的是:00 100 ~ 00 199, 01 100~01 199,……,11 100~ 11 199,12100~12199共1300個,顯然這個由高位數字決定,並且受當前位數影響,結果為:(高位數字)乘以(當前位數);

2)當c == 1的時候,比如13113,此時百位出現1的肯定包括c=0的情況,另外還需要考慮低位的情況即:00100 ~ 00113共114個,結果為:(高位數字)乘以(當前位數)+(低位數字)+1;

3)當c >= 2的時候,比如13213,此時百位出現1的是:00 100 ~ 00 199, 01 100~01 199,……,11 100~ 11 199,12 100 ~ 12 199,13100~13199,共1400個,這個僅由高位數字決定,結果為:(高位數字+1)乘以當前位數。

演算法 經典演算法

1 匹配演算法 匹配開始,從長的字串開始,匹配成功,長的和短的字串均向後匹配,而匹配失敗,則長的字串從開始的位置向後乙個字元,重新開始匹配,而短的字串則完全從頭開始。匹配演算法 param str1 長匹配字串 param str2 短的匹配字串 return 匹配成功 返回短字串在長字串開始的位置...

經典演算法 回溯演算法

回溯是遍歷搜尋空間所有可能組態的方法。這些組態也許代表物件的所有排列或這是構建物件集合的所有可能的方法 子集 其他情況包括列舉乙個圖的所有生成樹,兩個節點的所有路徑或是把節點分類成不同顏色的所有不同的方式。這些問題有乙個共同的難點就是我們必須每次產生乙個可能的組態。避免重複或遺漏組態的方法就是我們必...

經典演算法10

關鍵字 拉格朗日,牛頓插值,高斯,龍貝格 1.拉格朗日插值多項式 用於離散資料的擬合 c c code include include include float lagrange float x,float y,float xx,int n 拉格朗日插值演算法 free a return yy m...