1399. Conte o número de maiores grupos
Dificuldade simples 4
Dê um número inteiro n
. Primeiro, encontre a soma dos dígitos na representação decimal de cada número inteiro de ( 1
para n
adicionar os dígitos em cada dígito) e, em seguida, coloque os dígitos e os dígitos equivalentes no mesmo grupo.
Por favor, conte o número de números em cada grupo e retorne o número de grupos com o maior número de números em paralelo.
Exemplo 1:
Entrada: n = 13 Saída: 4 Explicação: Existem 9 grupos no total.Após a soma dos números de 1 a 13, os grupos são: [1,10], [2,11], [3,12], [4 , 13], [5], [6], [7], [8], [9]. No total, existem 4 grupos com mais números em paralelo.
Exemplo 2:
Entrada: n = 2 Saída: 2 Explicação: Existem 2 grupos de tamanho 1 [1], [2].
Exemplo 3:
Entrada: n = 15 Saída: 6
Exemplo 4:
Entrada: n = 24 Saída: 5
Dicas:
1 <= n <= 10^4
Idéias:
O método de simulação conta diretamente a soma dos dígitos de cada número em [1, n] e o coloca no dicionário l, key é a soma dos dígitos e val é o número de ocorrências da soma dos dígitos.
Em seguida, determine quantos do maior número de dígitos paralelos em l é.
Complexidade temporal: O (NlogN)
Complexidade do espaço: 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])