LeetCode-Python-1399。最大のグループの数を数えます(シミュレーション方法+ハッシュテーブル)

 

1399.最大のグループの数を数える

単純な難易度4

あなたに整数を与える  n 。最初に 、各整数の10進表現で各桁に桁1 を  n追加するために)桁合計を見つけてから  、桁と同等の桁を同じグループに入れてください。

各グループの数値の数を数えて、数値の数が最も多いグループの数を並列に返します。

 

例1:

入力: n = 13
 出力: 4
 説明:合計9つのグループがあります。1から13までの数を合計すると、グループは
[1,10]、[2,11]、[3,12]、[4 、13]、[5]、[6]、[7]、[8]、[9]。合計すると、並列数が最も多い4つのグループがあります。

例2:

入力: n = 2
 出力: 2
 説明:サイズ[1]、[2]の2つのグループがあります。

例3:

入力: n = 15
 出力: 6

例4:

入力: n = 24
 出力: 5

 

ヒント:

  • 1 <= n <= 10^4

アイデア:

シミュレーションメソッドは、[1、n]の各数値の桁の合計を直接カウントし、辞書lに入れます。keyは桁の合計で、valは桁の合計の出現回数です。

次に、lの最大平行桁数を決定します。

時間の複雑さ:O(NlogN)

スペースの複雑さ:O(logN)

class Solution(object):
    def countLargestGroup(self, n):
        """
        :type n: int
        :rtype: int
        """
        from collections import defaultdict
        l = defaultdict(int)   

        def helper(num):
            # 计算num数位之和,eg:输入34, 返回3 + 4 = 7
            s = 0
            while num:
                num, tmp = divmod(num, 10)
                s += tmp
            return s

        for num in range(1, n + 1):
            l[helper(num)] += 1
        
        mmax = max(l.values())
        return sum([1 for item in l.values() if item == mmax])

 

元の記事を734件公開 121件の賞賛 21万回表示

おすすめ

転載: blog.csdn.net/qq_32424059/article/details/105549523