class Solution: def minimumSum(self, n: int, k: int) -> int: result = [] current = 1 while len(result) < n: # 检查是否满足 k-avoiding 条件 valid=True for num in result: if current + num == k: valid = False break if valid: # 如果当前数字是有效的 result.append(current) current += 1 return sum(result)
解法二:Pythonic 写法
使用 Python3 内置函数 all(),使代码更简洁。
1 2 3 4 5 6 7 8 9
class Solution: def minimumSum(self, n: int, k: int) -> int: result = [] current = 1 while len(result)<n: if all(num+current!=K for num in result): result.append(current) current+1 return sun(result)
解法三:贪心 + 等差数列
核心思想 假设 k = 7, n = 3,数组构造分为两部分:
如果 n ≤ k//2,直接返回前 n 个数的和 如果 n > k//2,数组分为两部分: 第一部分:从 1 到 k/2 的和 第二部分:从 k 开始的 (n - k/2) 个数的和
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
class Solution: def minimumSum(self, n: int, k: int) -> int: # 如果 n 小于等于 k/2,直接返回前 n 个数的和 if n <= k // 2: return self.arithmeticSeriesSum(1, 1, n) else: # 第一部分:从 1 到 k/2 的和 first_part = self.arithmeticSeriesSum(1, 1, k // 2) # 第二部分:从 k 开始的 (n - k/2) 个数的和 second_part = self.arithmeticSeriesSum(k, 1, n - k // 2) return first_part + second_part