返回

打造精妙 Python 解决方案,轻松征服 LeetCode 2160

后端

LeetCode 2160:“分割数字后四位数字的最小和”,是 Biweekly Contest 71 中的一道难度为 Easy 的题目。它考察了对数组的基本操作以及求解最小和问题的技巧。

问题

给定一个正整数 num,将其分割成四个不同的正整数 abcd。每个数字都必须至少为一位数,且数字之间没有前导零。

求解分割后的数字和 a + b + c + d 的最小值。

思路分析

要解决这个问题,我们可以采取以下步骤:

  1. 将数字转换为字符串: 将给定的 num 转换为字符串表示,这样我们就可以轻松地访问和操作每个数字。
  2. 枚举所有可能的分组: 使用嵌套循环枚举所有可能的分组,其中每个循环代表一个分割点。
  3. 计算每个分组的和: 对于每个分组,将每个分割后的数字转换成整数,并计算它们的和。
  4. 找出最小和: 在枚举的所有分组中,找出最小和并返回。

Python 实现

def minimumSum(num):
    """
    :type num: int
    :rtype: int
    """
    # 将数字转换为字符串
    num_str = str(num)
    
    # 初始化最小和为无穷大
    min_sum = float('inf')
    
    # 枚举所有可能的分组
    for i in range(1, len(num_str) - 2):
        for j in range(i + 1, len(num_str) - 1):
            # 计算每个分组的和
            a = int(num_str[:i])
            b = int(num_str[i:j])
            c = int(num_str[j:j+1])
            d = int(num_str[j+1:])
            sum = a + b + c + d
            
            # 更新最小和
            min_sum = min(min_sum, sum)
            
    # 返回最小和
    return min_sum

代码解析

  • 初始化: 我们将数字 num 转换为字符串 num_str,并初始化最小和 min_sum 为无穷大。
  • 嵌套循环: 我们使用两个嵌套循环来枚举所有可能的分组。外层循环 i 表示第一个分割点,内层循环 j 表示第二个分割点。
  • 计算和: 对于每个分组,我们将每个分割后的数字转换成整数,并计算它们的和 sum
  • 更新最小和: 对于每个分组的和,我们将其与当前的最小和 min_sum 进行比较,并更新最小和。
  • 返回最小和: 枚举结束后,我们返回最小和 min_sum

示例

对于 num = 2932,输出为 17

结论

LeetCode 2160 是一道经典的数据结构和算法问题,要求我们对数组进行巧妙的操作并求解最小和。通过使用嵌套循环枚举所有可能的分组,我们可以找到满足要求的最小和。