31. Next Permutation
Problem
Analysis
Code
class Solution {
fun nextPermutation(nums: IntArray): Unit {
val leftIndex = (nums.lastIndex - 1 downTo 0).firstOrNull { nums[it + 1] > nums[it] } ?: -1
val rightIndex: Int
if (leftIndex >= 0) {
rightIndex = (leftIndex until nums.lastIndex).firstOrNull { nums[leftIndex] >= nums[it + 1] } ?: nums.lastIndex
nums.swap(leftIndex, rightIndex)
}
nums.reverse(leftIndex + 1)
}
private fun IntArray.reverse(index: Int) {
var start = index
var end = this.lastIndex
while (start < end) {
this.swap(start++, end--)
}
}
private fun IntArray.swap(left: Int, right: Int) {
val temp = this[right]
this[right] = this[left]
this[left] = temp
}
}Last updated