美文网首页
60. Permutation Sequence

60. Permutation Sequence

作者: 格调七弦 | 来源:发表于2016-05-30 23:32 被阅读344次

    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;
        }
    };
    

    相关文章

      网友评论

          本文标题:60. Permutation Sequence

          本文链接:https://www.haomeiwen.com/subject/juscdttx.html