LeetCode-Solutions-in-Cpp17

Solutions to high-frequency interview questions of LeetCode in C++17, taking into account both efficiency and comprehensibility.


Project maintained by downdemo Hosted on GitHub Pages — Theme by mattgraham
class Solution {
 public:
  void nextPermutation(vector<int>& nums) {
    next_permutation(nums.begin(), nums.end());
  }
};
23541 => 找到 3 < 5 => 排序 3 右侧
23145 => 将 3 与右侧第一个大于 3 的数交换
24135

54321 => 找不到则说明无下一排列,翻转即可
class Solution {
 public:
  void nextPermutation(vector<int>& nums) {
    if (nums.size() <= 1) {
      return;
    }
    for (int i = nums.size() - 1; i > 0; --i) {
      if (nums[i - 1] < nums[i]) {
        sort(nums.begin() + i, nums.end());
        for (int j = i; j < nums.size(); ++j) {
          if (nums[j] > nums[i - 1]) {
            swap(nums[i - 1], nums[j]);
            return;
          }
        }
      }
    }
    reverse(nums.begin(), nums.end());
  }
};