Python程序:压缩列表元素(从左或右)使其成为单个元素


假设我们有一个名为nums的数字列表,我们需要从左右两侧压缩它,直到只剩下一个元素。我们将返回每个步骤的状态。

因此,如果输入类似于nums = [10,20,30,40,50,60],则输出将是

[ [10, 20, 30, 40, 50, 60],
   [30, 30, 40, 110],
   [60, 150],
   [210]
]

为了解决这个问题,我们将遵循以下步骤:

  • ret := 一个只包含一个元素nums的列表
  • 当nums的大小 > 1时,执行:
    • 如果nums的大小等于2,则:
      • nums := 创建一个包含元素(nums[0] + nums[1])的列表
    • 否则,如果nums的大小等于3,则:
      • nums := 创建一个包含元素(nums[0] + nums[1] + nums[2])的列表
    • 否则:
      • nums := 创建一个包含元素(nums[0] + nums[1])的列表,然后插入nums中从索引2到倒数第三个元素的另一个列表,最后添加一个包含元素(倒数第二个元素 + 最后一个元素)的列表
    • 将nums插入ret的末尾
  • 返回ret

让我们看下面的实现来更好地理解:

示例

在线演示

class Solution:
   def solve(self, nums):
      ret = [nums]
      while len(nums) > 1:
         if len(nums) == 2:
            nums = [nums[0] + nums[1]]
         elif len(nums) == 3:
            nums = [nums[0] + nums[1] + nums[2]]
         else:
            nums = [nums[0] + nums[1]] + nums[2:-2] + [nums[-2] + nums[-1]]
            ret.append(nums)
      return ret
ob = Solution() print(ob.solve([10,20,30,40,50,60]))

输入

[10,20,30,40,50,60]

输出

[[10, 20, 30, 40, 50, 60], [30, 30, 40, 110], [60, 150], [210]]

更新于:2020年10月5日

140 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告