Giả sử chúng ta có một danh sách các số được gọi là num, chúng ta phải tìm một danh sách mới sao cho mỗi phần tử ở chỉ mục i của danh sách mới được tạo là tích của tất cả các số trong danh sách ban đầu trừ một phần tử ở chỉ mục i. Ở đây chúng ta phải giải quyết nó mà không sử dụng phép chia.
Vì vậy, nếu đầu vào là nums =[2, 3, 4, 5, 6], thì đầu ra sẽ là [360, 240, 180, 144, 120]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- nếu kích thước của nums <1, thì
- trả về số
- l:=kích thước của nums
- left:=danh sách kích thước l và ban đầu tất cả các giá trị đều rỗng
- right:=một danh sách có kích thước l và ban đầu tất cả các giá trị đều rỗng
- tạm thời:=1
- đối với tôi trong phạm vi từ 0 đến kích thước của nums, hãy thực hiện
- nếu tôi giống 0, thì
- left [i]:=temp
- nếu không,
- temp:=temp * nums [i - 1]
- left [i]:=temp
- nếu tôi giống 0, thì
- tạm thời:=1
- đối với tôi trong phạm vi kích thước nums - 1 đến 0, giảm 1, thực hiện
- nếu tôi giống với kích thước của nums - 1, thì
- right [i]:=temp
- nếu không,
- temp:=temp * nums [i + 1]
- right [i]:=temp
- nếu tôi giống với kích thước của nums - 1, thì
- đối với tôi trong phạm vi từ 0 đến kích thước của nums, hãy thực hiện
- left [i]:=left [i] * right [i]
- quay lại bên trái
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Giải pháp:def giải (self, nums):if len (nums) <1:return nums l =len (nums) left =[None] * l right =[None] * l temp =1 for i in range (len (nums)):if i ==0:left [i] =temp else:temp =temp * nums [i - 1] left [i] =temp temp =1 for i in range (len (nums) - 1, -1, -1):if i ==len (nums) - 1:right [i] =temp else:temp =temp * nums [i + 1] right [i] =temp for i in range ( len (nums)):left [i] =left [i] * right [i] return leftob =Solution () nums =[2, 3, 4, 5, 6] print (ob.solve (nums))Đầu vào
[2, 3, 4, 5, 6]Đầu ra
[360, 240, 180, 144, 120]