diff --git a/include/s0031_next_permutation.hpp b/include/s0031_next_permutation.hpp new file mode 100644 index 0000000..a3c4fd3 --- /dev/null +++ b/include/s0031_next_permutation.hpp @@ -0,0 +1,13 @@ +#ifndef S0031_NEXT_PERMUTATION +#define S0031_NEXT_PERMUTATION + +#include + +using namespace std; + +class Solution { + public: + void nextPermutation(vector& nums); +}; + +#endif diff --git a/src/s0031_next_permutation.cpp b/src/s0031_next_permutation.cpp new file mode 100644 index 0000000..76173b6 --- /dev/null +++ b/src/s0031_next_permutation.cpp @@ -0,0 +1,16 @@ +#include "s0031_next_permutation.hpp" + +void Solution::nextPermutation(vector& nums) { + int i = nums.size() - 2; + while (i >= 0 && nums[i] >= nums[i + 1]) { + i--; + } + if (i >= 0) { + int j = nums.size() - 1; + while (j >= 0 && nums[i] >= nums[j]) { + j--; + } + swap(nums[i], nums[j]); + } + reverse(nums.begin() + i + 1, nums.end()); +}