60. Permutation Sequence

Permutation Sequence
= =第一反应,把所有的都列出来,最多9!个嘛,感觉也不是很多,但是感觉总有点奇怪,还是作罢好了。
观察一下,比如:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"
    如果只看第一位,比如2,会连续出现,并且只连续出现,有点意思。
    如果按照第一位进行分组,则1,2是一组,3,4是一组,5,6是一组,共计6项三组。而6=123,如果拿1/2 = 0,得到0,0代表第一组。但是当6/2=3,此时没有第四组,所以应当做一个转化(1-1)/2 = 0,(6-1)/2 = 2,此时0,1,2分别代表1,2,3组。
    而得到的余数可以作为下一轮的k。OK,no bi bi,show me the code。
class Solution 
{
public:
    string getPermutation(int n, int k) 
    {
        string result = "";
        string buffer(n,'0');
        for (int i = 0; i < n; ++i)
        {
            buffer[i] = (i + '1');
        }
        int quotient = 1;
        int divisor = 1;
        for (int i = 2; i < n; ++i)
        {
            divisor *= i;
        }
        for (int i = 0; i < n - 1; ++i)
        {
            quotient = (k - 1) / divisor;
            k = (k - 1) % divisor + 1;
            result += buffer[quotient];
            buffer.erase(buffer.begin()+quotient);
            divisor /= (n - i - 1);
        }
        result += buffer;
        return result;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,930评论 18 399
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 5,935评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 10,532评论 0 41
  • Ahoh阅读 2,312评论 0 1