leetcode学習
6639 ワード
leetcode学習 Day1 タイトル説明 解題構想 合計: 点: 実装コード Day1
フォーラムの白は初めてCSDNを使ってブログを书いて、leetcodeの上でコードを学ぶのも初めてで、仕事の中でブログを使うことができないことを考虑して、时间は有限で、ゼロからゆっくり试みるしかなくて、みんなとの共同学习の中で自分の少しずつの进歩を见ます
タイトルの説明
1つの整数nが与えられ、n以下の非負の整数のうちの数1が現れるすべての数が計算される.例:入力:13出力:6解釈:数字1は、1,10,11,12,13の数字に表示されます.言語pythonの使用
問題を解く構想.
合計:
各数字をとり、1を含むすべての個数を巡り、すべての状況を列挙する.
ポイント:
1.桁数2を取得する.1より大きいと判断するビット数個数num 3.様々な場合(1個1 2個1...num個数1)4を書く.いろいろな場合の個数を列挙する
インプリメンテーションコード
フォーラムの白は初めてCSDNを使ってブログを书いて、leetcodeの上でコードを学ぶのも初めてで、仕事の中でブログを使うことができないことを考虑して、时间は有限で、ゼロからゆっくり试みるしかなくて、みんなとの共同学习の中で自分の少しずつの进歩を见ます
タイトルの説明
1つの整数nが与えられ、n以下の非負の整数のうちの数1が現れるすべての数が計算される.例:入力:13出力:6解釈:数字1は、1,10,11,12,13の数字に表示されます.言語pythonの使用
問題を解く構想.
合計:
各数字をとり、1を含むすべての個数を巡り、すべての状況を列挙する.
ポイント:
1.桁数2を取得する.1より大きいと判断するビット数個数num 3.様々な場合(1個1 2個1...num個数1)4を書く.いろいろな場合の個数を列挙する
インプリメンテーションコード
class Solution:
def countDigitOne(self, n):
"""
:type n: int
:rtype: int
"""
if n<10:
su=0
for i in range (1,n+1):
x=i
while x>0:
if x%10==1:
su=su+1
x=x//10
return su
else:
num=[]
y=n
while y>=1:
num.append(y%10)
y=y//10
a=n-num[-1]*(10**(len(num)-1))
b=10**(len(num)-1)
if num[-1]!=1:
su=Solution.countDigitOne(self, a)+b+num[-1]*Solution.countDigitOne(self,b-1)
return su
else:
su=Solution.countDigitOne(self, b-1)+Solution.countDigitOne(self,a)+1+(n-b)
return su