排列。
- 这道题可以参照下一个排列来做,关键是能够举出一个例子来,如123这三个数字组成的排列,归纳出一般的解题方法。中间一些细节需要仔细斟酌。
C++代码:
class Solution {
public:
/**
* @param nums: An array of integers
* @return: An array of integers that's previous permuation
*/
vector<int> previousPermuation(vector<int> &nums) {
int len = nums.size();
if (len == 0 || len == 1) {
return nums;
}
int i = len - 1;
while (i==0 || nums[i] >= nums[i-1]) {
if (i==0) {
sort(nums.begin(),nums.end(),[](int a,int b){return a>b;});
return nums;
}
i--;
}
i--;
//cout<<"i="<<i<<"nums[i]="<<nums[i]<<endl;
int temp = nums[i];
int index = i;
for (int j=i; j<len; j++) {
if(nums[i] > nums[j]) {
temp = nums[j];
index = j;
} else {
if (j != i)
break;
}
}
swap(nums[i],nums[index]);
//cout<<"index="<<index<<endl;
sort(nums.begin()+i+1,nums.end(),[](int a,int b){return a>b;});
return nums;
}
};