首页 > 其他 > 详细

leetcode 之Permutation(七)

时间:2016-05-15 16:32:55      阅读:270      评论:0      收藏:0      [点我收藏+]

首先是next permutation的算法的描述和分析如下:

技术分享

 

技术分享

              这题一是要知道思路,编程中注意STL的用法       

技术分享
 void nextPermutaion(vector<int> &num)
      {
          next_permutation(num.begin(), num.end());
      }
private:
    template<typename BidiIt>
    bool next_permutation(BidiIt first, BidiIt last)
    {
        //反向,注意!
        auto rfirst = reverse_iterator<BidiIt>(last);
        auto rlast = reverse_iterator<BidIt>(first);
        auto pivot = next(rfirst);
        while (pivot != rlast && *pivot > *prev(pivot))
            pivot++;

        if (pivot == rlast)
        {
            reverse(rfist, rlast);
            return false;
        }
        //注意用法
        auto change = find_if(rfirst, pivot, bind1st(less<int>(), *pivot));
        swap(*pivot, *change);
        reverse(rfirst, pivot);

        return true;
    }
View Code

 接着是Permutation Sequence

 技术分享

 人用康托编码来解这个问题,不过个人觉得不太好理解,其实完全可以用上题的思路

 

技术分享
string getPermutaion(int n, int k)
      {
          string s(n, 0);
          for (int i = 0; i < n; i++)
              s[i] += i + 1;

          for (int i = 0; i < k; i++)
              next_permutation(s.begin(), s.end());

          return s;
      }
View Code

 

leetcode 之Permutation(七)

原文:http://www.cnblogs.com/573177885qq/p/5495306.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!