Hôm nay, chúng ta có một thử thách lập trình Python khác được lấy từ LeetCode - vấn đề trò chơi nhảy LeetCode.
Chúng tôi sẽ thảo luận về một cách tiếp cận được đề xuất cho vấn đề LeetCode này, sau đó là một giải pháp Python được giải thích đầy đủ.
Ready?
Mục lục
- Vấn đề trò chơi nhảy leetcode
- ví dụ 1
- Ví dụ 2
- Cách tiếp cận được đề xuất cho vấn đề trò chơi nhảy LeetCode
- ví dụ 1
- Ví dụ 2
- Cách tiếp cận được đề xuất cho vấn đề trò chơi nhảy LeetCode
- Giải pháp trò chơi nhảy LeetCode được đề xuất trong Python
- Lặp lại hàm bằng cách sử dụng hàm ral []
- Bên trong vòng lặp
Vấn đề trò chơi nhảy leetcode
ví dụ 1
Ví dụ 2
ví dụ 1
Ví dụ 2
Cách tiếp cận được đề xuất cho vấn đề trò chơi nhảy LeetCode
Giải pháp trò chơi nhảy LeetCode được đề xuất trong Python
Lặp lại hàm bằng cách sử dụng hàm ral []
Bên trong vòng lặp
Ví dụ 2
Cách tiếp cận được đề xuất cho vấn đề trò chơi nhảy LeetCode
Giải pháp trò chơi nhảy LeetCode được đề xuất trong Python
Cách tiếp cận được đề xuất cho vấn đề trò chơi nhảy LeetCode
Giải pháp trò chơi nhảy LeetCode được đề xuất trong Python
Lặp lại hàm bằng cách sử dụng hàm ral []
Bên trong vòng lặp
ví dụ 1
Ví dụ 2
Cách tiếp cận được đề xuất cho vấn đề trò chơi nhảy LeetCode
Giải pháp trò chơi nhảy LeetCode được đề xuất trong Python
Lặp lại hàm bằng cách sử dụng hàm ral []
Bên trong vòng lặp
Sau khi vòng lặp
Hãy bắt đầu với vấn đề đầu tiên. Vấn đề này đòi hỏi chúng ta phải viết một hàm chấp nhận danh sách các số nguyên không âm. Mỗi phần tử trong danh sách thể hiện độ dài nhảy tối đa của bạn ở vị trí đó.
Ví dụ 2
Cách tiếp cận được đề xuất cho vấn đề trò chơi nhảy LeetCode
Giải pháp trò chơi nhảy LeetCode được đề xuất trong Python
Lặp lại hàm bằng cách sử dụng hàm ral []
Bên trong vòng lặp
Sau khi vòng lặp
Cách tiếp cận được đề xuất cho vấn đề trò chơi nhảy LeetCode
Giải pháp trò chơi nhảy LeetCode được đề xuất trong Python
def canJump[nums]: if len[nums] == 1: return True minStepsRequired = 0 previousGood = len[nums]-1 # work backwards and see if can reach final cell for i in range[len[nums]-2, -1, -1]: minStepsRequired = previousGood - i if nums[i] >= minStepsRequired: previousGood = i return previousGood == 0
Lặp lại hàm bằng cách sử dụng hàm ral []
Bên trong vòng lặp
Sau khi vòng lặp
Hãy bắt đầu với vấn đề đầu tiên. Vấn đề này đòi hỏi chúng ta phải viết một hàm chấp nhận danh sách các số nguyên không âm. Mỗi phần tử trong danh sách thể hiện độ dài nhảy tối đa của bạn ở vị trí đó.
False
1, mặt khác, lưu trữ chỉ số của vị trí đó.
Chúng tôi khởi tạo False
1 đến chỉ số của phần tử cuối cùng trong True
7 vì chúng tôi sẽ lặp lại True
7 ngược và vị trí cuối cùng luôn được coi là một vị trí tốt.
Lặp lại hàm bằng cách sử dụng hàm ral []
Từ các dòng 9 đến 12, chúng tôi có vòng lặp False
7 sử dụng hàm False
8 để lặp qua True
7.
Hãy nhớ lại rằng hàm [1, 1, 0, 3]
0 trả về một chuỗi các số bắt đầu từ [1, 1, 0, 3]
1 và kết thúc một số trước [1, 1, 0, 3]
2.
[1, 1, 0, 3]
3 Chỉ định sự gia tăng để sử dụng.
Trong giải pháp được đề xuất của chúng tôi, [1, 1, 0, 3]
1 bằng [1, 1, 0, 3]
5, [1, 1, 0, 3]
2 bằng -1 và [1, 1, 0, 3]
3 bằng -1.
Điều này có nghĩa là chúng tôi muốn hàm False
8 bắt đầu từ [1, 1, 0, 3]
5 và tiếp tục giảm 1 cho đến khi chúng tôi đạt được một số trước [1, 1, 0, 3]
2 [tức là một số trước -1, là 0].
Điều này dẫn đến vòng lặp False
7 lặp lại từ phần tử cuối cùng thứ hai trong danh sách đến phần tử thứ nhất.
Bên trong vòng lặp
Bên trong vòng False
7, chúng tôi tính toán số bước tối thiểu cần thiết để đạt được vị trí tốt gần đây nhất [trên dòng 10].
Giả sử False
3.
Lần đầu tiên vòng lặp False
7 chạy, chúng tôi sẽ ở phần tử cuối cùng thứ hai trong True
7 [tức là tại INDEX 3].
False
1 lưu trữ chỉ số của phần tử cuối cùng trong True
7, là 4.
False
0 sau đó sẽ là False
9 [trong đó [1, 2, 0, 3]
0 lưu trữ chỉ số hiện tại] = 4 - 3 = 1.
Điều này có nghĩa là tại INDEX 3, chúng ta chỉ cần nhảy một bước để đạt được vị trí gần đây nhất được coi là tốt.
Trên dòng 11, chúng tôi kiểm tra xem có thể nhảy một bước từ chỉ mục 3. Vì [1, 2, 0, 3]
1 là 4 [lớn hơn hoặc bằng 1], có thể. Do đó, chỉ số 3 được coi là một vị trí tốt.
Do đó, chúng tôi cập nhật giá trị của False
1 lên 3 [trên dòng 12].
Ở mỗi bước khi chúng tôi lặp lại đến True
7, chúng tôi tiếp tục kiểm tra xem có thể đạt được vị trí được chỉ định bởi False
1 từ chỉ số hiện tại không. Nếu có, chúng tôi cập nhật giá trị của False
1 lên chỉ mục hiện tại.
Chẳng hạn, khi [1, 2, 0, 3]
0 bằng 2 [nghĩa là tại chỉ số 2], False
1 là 3.
Chúng ta cần kiểm tra xem có thể nhảy từ chỉ mục 2 sang chỉ mục 3. Nếu có thể đến INDEX 3 từ INDEX 2, chúng ta biết rằng có thể đạt được phần tử cuối cùng trong True
7. Điều này là do từ INDEX 3, chúng ta có thể nhảy đến INDEX 4, đó là yếu tố cuối cùng.
Vì chúng ta chỉ cần nhảy một bước từ chỉ mục 2 sang chỉ số 3 [theo tính toán theo công thức trên dòng 10] và [1, 2, 0, 3]
9 là 2, nên có thể.
Do đó, INDEX 2 được coi là một vị trí tốt và chúng tôi cập nhật giá trị của False
1 lên 2.
Chúng tôi tiếp tục làm điều đó cho đến khi chúng tôi hoàn thành việc lặp lại tất cả các yếu tố trong True
7.
Sau khi vòng lặp
Sau khi lặp qua tất cả các yếu tố trong True
7, nếu giá trị cuối cùng của False
1 là 0, chúng ta biết rằng vị trí 0 là một vị trí tốt. Điều này có nghĩa là có thể đạt được phần tử cuối cùng từ INDEX 0.
Nếu đó là trường hợp, chúng tôi sẽ trở lại True
.
Chúng tôi làm điều đó bằng cách trả về kết quả của điều kiện True
5 trên dòng 14. Nếu True
5 trả về True
, chúng tôi sẽ trả lại True
. Khác, chúng tôi trở lại False
.
Với điều đó, chức năng đã hoàn thành.