class Solution { public: void swap_code(vector<int>& nums,int start,int end) { while(end>start)//错过,应该只要大于就换 { int temp=nums[start]; nums[start]=nums[end]; nums[end]=temp; start++; end--; } } void nextPermutation(vector<int>& nums) { int len=nums.size(); if(len<2) return; int start=len-1,end=len-1; while(start!=0 && nums[start]<=nums[start-1])//错过,应该是小于等于 start--; if(start==0) swap_code(nums,start,end); else { int temp=start; while(temp!=end+1 && nums[temp]>nums[start-1])//这些都是靠分析问题得到的 temp++; int swap_temp=nums[temp-1]; nums[temp-1]=nums[start-1]; nums[start-1]=swap_temp; swap_code(nums,start,end); } } };
分析:
对问题理解和分析很重要啊。本身并不算难。