时间复杂度:O(n) 查找下降点,O(n) 查找交换点,O(n) 反转,O(n) 空间复杂度:O(1) */ classSolution { public: voidnextPermutation(vector<int>& nums){ int n = nums.size(); int i = n-2;
// 从后向前找第一个 nums[i] < nums[i+1] while (i >= 0 && nums[i] >= nums[i+1]) { i--; }
if (i >= 0) { // 从后向前找第一个大于 nums[i] 的数 int j = n-1; while (j > i && nums[j] <= nums[i]) { j--; } // 交换 nums[i] 和 nums[j] swap(nums[i], nums[j]); }