int len = nums.size(); if (len < 1) return; //反遍历,找到非降序的首元素 int i = len - 2; while (i >= 0 && nums[i] >= nums[i + 1]) { --i; } if (i >= 0) { int j = len - 1; while (j >= 0 && nums[j] <= nums[i]) { --j; } swap(nums[i], nums[j]); } reverse(nums ,i + 1, len - 1); } };