1到n的整數中,1出現的次數

2021-09-26 02:57:06 字數 1343 閱讀 3939

輸入乙個整數n,求1-n這n個整數的十進位制表示中1出現的次數。

將整數n變成字串的形式,提取出字串的首字元first_num。

如果first_num==1,則以1為首位的整數的個數為去掉其首位數字的大小加1,例如12345,萬位為1的數字個數為2346。

如果first_num不等於1,則以1為首位的整數的個數為10的n次方,n為字串長度減1,例如:23456中以1為首位的整數的個數為10^4;

2345中以1為首位的整數的個數為10^3;

接下來判斷首位之後的位置出現1的次數,從第二位開始分別固定每個位置,根據排列組合,每個位置出現1的概率為first_num*(n-1)*10^(n-2)

最後呼叫遞迴判斷以第二位置為首的數字出現1的個數。

python**:

# -*- coding:utf-8 -*-

class solution:

def numberof1between1andn_solution(self, n):

# write code here

if n <= 0:

return 0

if n < 10 and n > 0:

return 1

str_num = str(n)

length = len(str_num)

first_num = str_num[0]

if first_num == '1':

num1 = n - self.tencifang(length - 1) + 1

else:

num1 = self.tencifang(length - 1)

print(num1)

num2 = int(first_num) * (length - 1) * self.tencifang(length - 2)

print(num2)

num3 = self.numberof1between1andn_solution(n - int(first_num) * self.tencifang(length - 1))

print(num3)

return num1 + num2 + num3

def tencifang(self, n):

result = 1

for i in range(0, n):

result *= 10

return result

if __name__ == '__main__':

solution = solution()

print(solution.numberof1between1andn_solution(10))

1到n整數中1出現的次數

1.分析 如果 n 12 即 1 12 中含有1 的數有 1 10 11,12 則1出現的次數為 5 假如計算 1 31245 怎麼計算 第一步 分為兩段 1245 和 1246 31245 第兩步 分別計算這兩段中1出現的次數,最後結果相加 首先計算1246 31245 這一段的1出現的次數 三種...

整數1到n中1出現的次數

比如求出1 13的整數中1出現的次數,1 13中包含1的數字有1 10 11 12 13因此共出現6次,把問題更加普遍化,求出任意非負整數區間中1出現的次數 從1 到 n 中1出現的次數 參考自部落格 按位依次計算,計算出現在個位上1的次數,十位上1的次數.對於某一位的1的個數如此計算,比如對980...

整數中1出現的次數(從1到n整數中1出現的次數)

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。include u...