zoukankan      html  css  js  c++  java
  • Leetcode60. Permutation Sequence第k个排列

    给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。

    按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

    1. "123"
    2. "132"
    3. "213"
    4. "231"
    5. "312"
    6. "321"

    给定 n 和 k,返回第 k 个排列。

    说明:

    • 给定 n 的范围是 [1, 9]。
    • 给定 k 的范围是[1,  n!]。

    示例 1:

    输入: n = 3, k = 3 输出: "213"

    示例 2:

    输入: n = 4, k = 9 输出: "2314"

    较为低效的回溯做法

    class Solution {
    public:
        int N;
        int K;
        int cntk;
        vector<bool> visit;
        string res;
        string getPermutation(int n, int k) 
        {
            N = n;
            K = k;
            cntk = 0;
            visit = vector<bool>(n + 1, false);
            DFS(n, 0);
            return res;
        }
    
        bool DFS(int cnt, int num)
        {
            if(cnt == 0)
            {
                cntk++;
                if(cntk == K)
                {
                    res = to_string(num);
                    return true;
                }
                else
                    return false;
            }
            for(int i = 1; i <= N; i++)
            {
                if(visit[i] == true)
                    continue;
                visit[i] = true;
                num = num * 10 + i;
                if(DFS(cnt - 1, num))
                {
                    return true;
                }
                visit[i] = false;
                num = (num - i) / 10;
            }
            return false;
        }
    };
  • 相关阅读:
    InterLockedIncrement and InterLockedDecrement
    bzoj2763
    bzoj1922
    bzoj1705
    bzoj1040
    bzoj3039
    bzoj1801
    bzoj2565
    bzoj1976
    一类最小割bzoj2127,bzoj2132 bzoj3438
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433794.html
Copyright © 2011-2022 走看看