Giả sử chúng ta có một danh sách các số được gọi là num, chúng ta phải bóp nó từ cả bên trái và bên phải cho đến khi còn lại một phần tử. Chúng tôi sẽ trả lại các trạng thái ở mỗi bước.
Vì vậy, nếu đầu vào giống như nums =[10,20,30,40,50,60], thì đầu ra sẽ là
[ [10, 20, 30, 40, 50, 60], [30, 30, 40, 110], [60, 150], [210] ]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- ret:=danh sách chỉ có một nums phần tử
- trong khi kích thước của nums> 1, thực hiện
- nếu kích thước của nums bằng 2, thì
- nums:=tạo danh sách có phần tử (nums [0] + nums [1])
- ngược lại khi kích thước của num bằng 3, thì
- nums:=tạo danh sách có phần tử (nums [0] + nums [1] + nums [2])
- nếu không,
- nums:=tạo một danh sách với các phần tử (nums [0] + nums [1]) sau đó chèn một danh sách khác từ nums từ chỉ mục 2 đến phần tử cuối cùng thứ ba của nums rồi thêm một danh sách khác có phần tử (phần tử cuối cùng thứ hai của nums + phần tử cuối cùng của nums)
- chèn nums vào cuối ret
- nếu kích thước của nums bằng 2, thì
- trả lời lại
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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]))
Đầu vào
[10,20,30,40,50,60]
Đầu ra
[ [10, 20, 30, 40, 50, 60], [30, 30, 40, 110], [60, 150], [210] ]