Permalink
Không thể lấy lại những người đóng góp tại thời điểm này
Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều
Giải pháp lớp học: | |
# @param A: Danh sách số nguyên | |
# @return cùng một danh sách số nguyên sau khi sửa đổi | |
DEF NEXTPERMUNT [tự, A]: | |
i = len [a] - 2 | |
Trong khi A [i]> = a [i+1]: | |
i = i - 1 | |
Nếu tôi A[idx] Trường hợp cơ sở sẽ là, nếu mảng theo thứ tự giảm, sẽ không tìm thấy hoán vị tiếp theo, do đó trả lại mảng theo thứ tự được sắp xếp. Thực hiện phương pháp: Vì vậy, bây giờ sau khi hoán đổi, chúng tôi đã tìm thấy yếu tố trục. Nhưng chúng tôi vẫn chưa có hoán vị cần thiết. Do đó, chỉ cần sắp xếp các yếu tố từ trục cho đến cuối để có được hoán vị cần thiết. Ví dụ sau đây sẽ làm cho cách tiếp cận rõ ràng hơn. Thuật toán:
Thực hiện phương pháp: Mã C ++void nextPermutation[vector < int > & nums] { int n = nums.size[], k, l; for [k = n - 2; k >= 0; k--] { if [nums[k] < nums[k + 1]] { break; } } if [k < 0] { reverse[nums.begin[], nums.end[]]; } else { for [l = n - 1; l > k; l--] { if [nums[l] > nums[k]] { break; } } swap[nums[k], nums[l]]; reverse[nums.begin[] + k + 1, nums.end[]]; } } Mã Javapublic void nextPermutation[int[] A] { if [A == null || A.length = 0 && A[i] >= A[i + 1]] i--; if [i >= 0] { int j = A.length - 1; while [A[j] 0 and nums[i - 1] >= nums[i]: i -= 1 if i == 0: nums.reverse[] return k = i - 1 while nums[j] |