字典序算法

发布时间:2019年08月30日 阅读:258 次

https://leetcode-cn.com/problems/next-permutation/submissions/

算法介绍见 微信 程序员小灰

。。

挺坑的

#include<bits/stdc++.h>
using namespace std;
class Solution {
public:
    void nextPermutation(vector<int>& nums) {
      //  vector<int>ans;

        int len = nums.size();
       if(len<2)return;   //防止只有一个数
        int j = len-1;
        while(j>=1&&nums[j-1]>=nums[j])j--;  //  注意加上等于号,5 1 1情况
        int i = len-1;
        if(j>0) //不加会出现nums[-1]
        while(nums[i]<=nums[j-1]&&i>j)i--;  // 注意,i>j,加上等于号
//        cout<<"j: "<<j-1<<endl;
//        cout<<"i: "<<i<<endl;
        if(j==0){
            sort(nums.begin(),nums.end());
            return;
            //  return nums;
        }
        else if(i>=0&&j>=1){
            swap(nums[i],nums[j-1]);
            sort(nums.begin()+j,nums.end());
            //return nums;
        }
    }
};
int main(){
    Solution ss;
    int n;
    cin>>n;
    vector<int>nums;
    for(int i=1;i<=n;i++){
        int num;
        cin>>num;
        nums.push_back(num);
    }
    ss.nextPermutation(nums);
    for(int p:nums){
        cout<<p<<" ";
    }
}



//#include <iostream>
//#include<bits/stdc++.h>
//using namespace std;
//int board[500];
//const long long inf = 1e18;
//long long getsum(){
//  long long ans =0;
//  ans+=board[0]*board[1]*board[2]*board[3];
//  ans+=board[4]*board[5]*board[10]*board[11];
//  ans+=board[8]*board[9]*board[14]*board[15];
//  ans+=board[6]*board[7]*board[12]*board[13];
//  ans+=board[16]*board[17]*board[18]*board[19];
//  ans+=board[20]*board[21]*board[22]*board[23];
////  ans+=board[12]*board[13]*board[14]*board[15];
//
//  return ans;
//}
//void Swap(int a,int b,int c){
////    s
//}
//void Right(){
//
//}
//void Left(){
//}
//void Up(){
//}
//void Down(){
//}
//void Behind(){
//
//}
//void Front(){
//
//}
//int Ans  = 0;
//void DFS(int ){
//
//    long long sum = getsum();
//    if(sum>Ans){
//
//    }
//    if(tp==5)return ;
//
//}
//int main()
//{
//
//    for(int i=0;i<24;i++)
//        scanf("%d",&board[i]);
//
//    return 0;
//}


Tag:
相关文章

发表评论: