単純な難易度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])