本文使用python實現
求1~1300的整數中1出現的次數?比如1,10,11,12,13這5個數字中1出現了6次。
時間限制:1s;空間限制:32768k
方法一:暴力解法(當數字較小時可以,數字很大時不可取)
方法二:觀察規律(在此我們將題目拓展成整數中 x 出現的次數, x∈ )
(1)在 [1,10] 中 ,個位上 x 出現的次數為 1 。
(2)在 [11,100] 中,十位上 x 出現的次數為 10 。
(3)在 [101,1000] 中,百位上 x 出現的次數為 100 。
(4)以此類推,在 [10i+1,10(i+1)] 上,從右數第 i 位上 x 出現的次數為 10(i−1) 。
而 [1,n] 中第 i 位上 x 出現的次數規律為:
(a)當第 i 位的數字 >x 時,[1,n] 中第 i 位上為 x 的個數為:(n//10i+1)∗10(i−1)
(b)當第 i 位的數字 5 ,故對照規律(a): (2593//102+1)×10(2−1)=260 ,也就是說,在 [0 2593] 中 5 在十位上出現了 260 次。
(3)百位(從右至左第3位):由於百位上的數字 5=5 ,故對照規律(c): (2593//103)∗10(3−1)+(2593取模103−5∗10(3−1)+1)=294 ,也就是說,在 [0 2593] 中 5 在百位上出現了 294 次。
(4)千位(從右至左第4位):由於百千位上的數字 2<5 ,故對照規律(b):(2593//104)×10(4−0)=0 ,也就是說,在 [0 2593] 中 5 在千位上出現了 0 次。
故 5 在 [1,2593] 中共出現了 259+260+294+0=813 次。
class solution:
def numberof1between1andn_solution(self, n):
count = 0
tmp = n
i = 1
while tmp != 0:
# a為每位上的數字
a = tmp % 10
rem = n % (10**i)
con = n // (10**i)
base = 10**(i-1)
if a > 1:
count += (con + 1) * base
elif a < 1:
count += con * base
else:
count += con * base + (rem - 1*base + 1)
tmp = tmp // 10
i += 1
return count
劍指offer 1 找出陣列中重複的數字
給定乙個長度為 n 的整數陣列 nums,陣列中所有的數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。注意 如果某些數字不在 0 n 1 的範圍內,或陣列中不包含重複數字,則返回 1 樣例給定 nums 2...
劍指offer(查詢) 整數中1的出現次數
求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數 從1 到 n 中1...
劍指offer 找出陣列中重複的數字
問題 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍裡,不知道重複的數字,也不知道每個重複數字重複幾次,找出陣列中所有重複的數字,如輸入,則應輸出。要求1 能改變陣列中的數字 思路1 將陣列排序,然後遍歷陣列,找出重複的數字。時間複雜度o nlogn 空間複雜度o 1 思路1的實現 vecto...