LeeCode 刷题系列
题目
- 31—下一个排列
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目一
31.下一个排列
void swap(int *a, int *b) {
int t = *a;
*a = *b, *b = t;
}
void reverse(int *arr, int start, int end){
while(start < end){
// 注意传入的是指针!不是数组
swap(arr+start, arr+end);
start++;
end--;
}
}
void nextPermutation(int* nums, int numsSize){
int i = numsSize-2;
while (i >= 0 && nums[i] >= nums[i + 1]) {
i--;
}
if(i>=0){
int j = numsSize-1;
while(j>=0 && nums[i]>=nums[j]){
j--;
}
swap(nums+i, nums+j);
}
reverse(nums, i+1, numsSize-1);
}
总结
提示:这里对文章进行总结:
31题总结:
对指针运用方法更好,顺序读取问题。