新闻详情

新闻详情

首页 / 资讯中心 / 详情

Leetcode31 下一个排列

发布时间:2026/6/9 3:31:13
Leetcode31 下一个排列
一、问题描述二、解题思路采用找、换、翻3步骤来解决这个问题1找:从右向左找到第一个可以增大的位置i即最小的可以增大的位置2换:将该位置的数与[i1,nums.size()-1]区间最小的但大于其的数交换3翻:将[i1,nums.size()-1]区间翻转,由于该集合为降序所以进行逆转保证增幅最小。三、代码实现class Solution { public: void nextPermutation(vectorint nums) { //找增幅最小的排列 int nnums.size(); //1.找:从右向左找到第一个可以增大的位置i int in-2; while(i0nums[i]nums[i1]) i--; //2.换:将该位置的数与[i1,nums.size()-1]区间最小的大于其的数交换 int jn-1; if(i0){ while(jinums[j]nums[i]) j--; swap(nums[i],nums[j]); } //3.翻:将[i1,nums.size()-1]区间翻转 reverse(nums.begin()i1,nums.end()); } };
网站建设 高端定制 企业官网