给出一个数字 找出比它大的最小数字 - lifengyu360/lifengyu_first_git_test GitHub Wiki
class Solution {
public:
void nextPermutation(vector<int>& nums) {
/* int input = 24539;
string str = to_string(input);
vector<int> test;
for (int i = 0; i < str.size(); i++){
test.push_back(str[i] - '0');
cout << " shuzi = " << str[i] - '0' << endl;
}
*/
int i = nums.size() - 2;
//从数组的最后一个元素倒着找到第一个前面值小于后面的序号 i
while (i >= 0 && nums[i] >= nums[i + 1]) {
i--;
}
//如果序号大于等于1 说明找到了位置
if (i >= 0) {
//重新倒着找下标j 找到第一个小于i值的那个序号j
int j = nums.size() - 1;
while (j >= 0 && nums[i] >= nums[j]) {
cout << " j = " << j <<endl;
j--;
}
//交换位置
cout << " swap " << " i = " << i << "j = " << j <<endl;
swap(nums[i], nums[j]);
}
cout << " i = " << i << endl;
//注意这个翻转是从i+1的位置直到最后===================
reverse(nums.begin() + i + 1, nums.end());
}
};