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を書く.いろいろな場合の個数を列挙する
    インプリメンテーションコード
    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