輸入乙個整數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...