Description
You are given an integer n.
We need to group the numbers from 1 to n according to the sum of its digits. For example, the numbers 14 and 5 belong to the same group, whereas 13 and 3 belong to different groups.
Return the number of groups that have the largest size, i.e. the maximum number of elements.
Example 1:
Input: n = 13 Output: 4 Explanation: There are 9 groups in total, they are grouped according sum of its digits of numbers from 1 to 13: [1,10], [2,11], [3,12], [4,13], [5], [6], [7], [8], [9]. There are 4 groups with largest size.
Example 2:
Input: n = 2 Output: 2 Explanation: There are 2 groups [1], [2] of size 1.
Constraints:
1 <= n <= 104
Solutions
Solution 1: Hash Table or Array
We note that the number does not exceed 104, so the sum of the digits also does not exceed 9 × 4 = 36. Therefore, we can use a hash table or an array of length 40, denoted as cnt, to count the number of each sum of digits, and use a variable mx to represent the maximum count of the sum of digits.
We enumerate each number in [1,..n], calculate its sum of digits s, then increment cnt[s] by 1. If mx < cnt[s], we update mx = cnt[s] and set ans to 1. If mx = cnt[s], we increment ans by 1.
Finally, we return ans.
The time complexity is O(n × log n), and the space complexity is O(log n), where n is the given number.
class Solution: def countLargestGroup(self, n: int) -> int: cnt = Counter() ans = mx = 0 for i in range(1, n + 1): s = 0 while i: s += i % 10 i //= 10 cnt[s] += 1 if mx < cnt[s]: mx = cnt[s] ans = 1 elif mx == cnt[s]: ans += 1 return ans(code-box)
