Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมบีบอัดลิสต์จากขวา-ซ้ายจนเหลืออีเล็มน์ต์เดียวใน Python

บีบอัดลิสต์: รวมคู่แรกและคู่สุดท้ายซ้ำๆ จนเหลือ 1 อีเล็มน์ต์ คืนสถานะทุกขั้นตอน

ตัวอย่าง: [10,20,30,40,50,60] → [[10,20,30,40,50,60], [30,30,40,110], [60,150], [210]]

อัลกอริธึม

  • ขณะความยาว > 1:
  • ยาว 2: รวมทั้งคู่
  • ยาว 3: รวมทั้งสาม
  • อื่น: รวมคู่แรก, คงกลางไว้, รวมคู่สุดท้าย

การนำไปใช้

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], [30,30,40,110], [60,150], [210]]