LeetCode 31. Next Permutation

来源:互联网 发布:centos识别u盘 编辑:程序博客网 时间:2024/06/05 17:55
#include <vector>#include <iostream>#include <algorithm>using namespace std;/*  Implement next permutation, which rearranges numbers into the lexicographically  next greater permutation of numbers.  If such arrangement is not possible, it must rearrange it as the lowest possible  order (ie, sorted in ascending order).  The replacement must be in-place, do not allocate extra memory.  Here are some example.Inputs are in the left-hand column and its corresponding  outputs are in the right hand column.  1, 2, 3 -> 1, 3, 2  3, 2, 1 -> 1, 2, 3  1, 1, 5 -> 1, 5, 1  The given example actually is not that clear.  Think about this one: 1, 3, 2 -> 2, 1, 3  the process is first locate "1" position. swap(1, 2) and reverse the following.*/vector<int> nextPermutation(vector<int> nums) {  int k = nums.size() - 2;  while(k >= 0 && nums[k] >= nums[k+1]) {    k--;  }  if(k == -1) {    return {};  }  for(int i = nums.size() - 1; i > k; --i) {    if(nums[i] > nums[k]) {      swap(nums[i], nums[k]);      break;    }  }  reverse(nums.begin() + k + 1, nums.end());  return nums;}int main(void) {  vector<int> nums{1, 3, 2};  vector<int> res = nextPermutation(nums);  for(int i = 0; i < res.size(); ++i) {    cout << res[i] << " ";  }}                                                                                       1,1           Top

0 0
原创粉丝点击