lintcode 統計數字

2021-09-19 12:19:35 字數 1279 閱讀 8542

計算數字 k 在 0 到 n 中的出現的次數,k 可能是 0~9 的乙個值。

樣例樣例 1:

輸入:

k = 1, n = 1

輸出:1

解釋:在 [0, 1] 中,我們發現 1 出現了 1 次 (1)。

樣例 2:

輸入:

k = 1, n = 12

輸出:5

解釋:在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 中,我們發現 1 出現了 5 次 (1, 10, 11, 12)(注意11中有兩個1)。

本題是為了統計數字k(0~9)在0到n**現的次數,首先我們以普通的情況來舉例。若k=3,n=1234,要知道0-1234中包含多少個3,我們需要知道在3在1234的每一位上出現的次數。

先來看個位,3在個位上出現過多少次?因為1234的個位4>3,所以區間內個位出現3的數字有1233,1223,1213,1203,1193,········13,03;總共有(123-0+1)=124個。

再來看十位上,因為1234的十位3=3,所以區間內十位出現3的數字有1234,1233,1232,1231,1230,1139,1138,1137,1136,·······1130,1039,······,1030,······,39,·····,30;共有:((11-0+1)*10)+4-0+1=125個。

百位上,因為1234百位上2<3,所以區間內百位出現3的數字只有399,······,300;共有100個。

千位上,因為1234千位上1<3,所以區間內千位出現3的數字沒有。

用cur來表示當前數字,aft來表示當前數字後面的數字,hea來表示當前數字的前面的數字。可以計算出目標數字k出現在當前位置的數字的個數在區間內有多少個,其中math.pow(10, i)是當前位置的數量級,比如,當前位置是百位,那麼math.pow(10, i)=100;

if(cur>k)

count+=(hea+1)*math.pow(10, i);

else if(cur==k)

count+=(hea)*math.pow(10, i)+(aft)*math.pow(10,0)+1;

else if(cur下面粘上**:

public class solution

}return count;

}return 0;

}

}​

A 統計數字

time limit 1 sec memory limit 128 mb submit 51 solved 28 submit status web board 某次科研調查時得到了n個自然數,每個數均不超過1500000000 1.5 109 已知不相同的數不超過10000個,現在需要統計這些自然...

頁碼統計(統計數字)

牛牛新買了一本演算法書,演算法書一共有n頁,頁碼從1到n。牛牛於是想了乙個演算法題目 在這本演算法書頁碼中0 9每個數字分別出現了多少次?輸入描述 輸入包括乙個整數n 1 n 1,000,000,000 輸出描述 輸出包括一行10個整數,即0 9這些數字在頁碼中出現的次數,以空格分隔。行末無空格。示...

統計數字問題

在王曉東編著的 演算法設計與實驗題解 中看到的這個問題,問題描述如下 一本書的頁碼從自然數1開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排,每個頁碼都不含多餘的前導數字0。例如第6頁用6表示而不是06或006。數字統計問題要求對給定書的總頁碼,計算出書的全部頁碼中分別用到多少次數字0,1,2,...