zoukankan      html  css  js  c++  java
  • LeetCode: Next Permutation

    思路还是清楚的,从后面倒着数,中间有一些问题没考虑到,不过很快解决,少数次过

     1 class Solution {
     2 public:
     3     void nextPermutation(vector<int> &num) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         vector<int> des;
     7         int i;
     8         for (i = num.size()-1; i > 0; i--) {
     9             if (num[i] <= num[i-1]) des.push_back(num[i]);
    10             else break;
    11         }
    12         if (!i) {
    13             des.push_back(num[0]);
    14             num = des;
    15         }
    16         else {
    17             int tmp = num[i-1];
    18             des.push_back(num[i]);
    19             int j;
    20             for (j = 0; j < des.size(); j++) 
    21                 if (des[j] > num[i-1]) break;
    22             num[i-1] = des[j];
    23             for (int k = 0; k < des.size(); k++) {
    24                 if (k != j) num[i+k] = des[k];
    25                 else num[i+k] = tmp;
    26             } 
    27         }
    28     }
    29 };

     后来写了段更加好的代码

     1 class Solution {
     2 public:
     3     void nextPermutation(vector<int> &num) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         if (!num.size()) return;
     7         int pos = num.size();
     8         for (int i = num.size()-1; i >= 0; i--) {
     9             if (i && num[i] > num[i-1]) {
    10                 pos = i;
    11                 break;
    12             }
    13         }
    14         if (pos == num.size()) {
    15             reverse(num.begin(), num.end());
    16             return;
    17         }
    18         for (int i = num.size()-1; i >= pos; i--) {
    19             if (num[i] > num[pos-1]) {
    20                 swap(num[i], num[pos-1]);
    21                 break;
    22             }
    23         }
    24         reverse(num.begin()+pos, num.end());
    25     }
    26 };

     C#, Array.Reverse()函数并不能对一段Array进行Reverse,所以没选择第二段代码

     1 public class Solution {
     2     public void NextPermutation(int[] nums) {
     3         List<int> des = new List<int>();
     4         int i = 0;
     5         for (i = nums.Length-1; i > 0; i--) {
     6             if (nums[i] <= nums[i-1]) des.Add(nums[i]);
     7             else break;
     8         }
     9         if (i == 0) {
    10             des.Add(nums[0]);
    11             for (int k = 0; k < des.Count; k++) nums[k] = des[k];
    12         }
    13         else {
    14             int tmp = nums[i-1];
    15             des.Add(nums[i]);
    16             int j = 0;
    17             for (j = 0; j < des.Count; j++) {
    18                 if (des[j] > nums[i-1]) break;
    19             }
    20             nums[i-1] = des[j];
    21             for (int k = 0; k < des.Count; k++) {
    22                 if (k != j) nums[i+k] = des[k];
    23                 else nums[i+k] = tmp;
    24             }
    25         }
    26     }
    27 }
    View Code
  • 相关阅读:
    发现不错的cache系统Cache Manager Documentation
    List.Sort用法
    Database Initialization Strategies in Code-First:
    git rebase
    osharpV3数据库初始化
    IdentityDbContext
    AspNetUsers
    VS2015 推荐插件
    ELMAH日志组件数据库脚本
    C#如何把List of Object转换成List of T具体类型
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3012122.html
Copyright © 2011-2022 走看看