<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實戰(zhàn)60:第k個排列

          共 1510字,需瀏覽 4分鐘

           ·

          2020-10-08 06:07

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做?第k個排列,我們先來看題面:

          https://leetcode-cn.com/problems/permutation-sequence/

          The set [1,2,3,...,n] contains a total of n! unique permutations.

          題意


          給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。
          按大小順序列出所有排列情況,并一一標記,當 n = 3 時, 所有排列如下:

          "123"
          "132"
          "213"
          "231"
          "312"
          "321"
          給定 n 和 k,返回第 k 個排列。
          說明:給定 n 的范圍是 [1, 9]。給定 k 的范圍是[1, ?n!]。

          樣例

          示例 1:

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

          示例 2:

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


          解題

          這道題就是個找規(guī)律題目!
          直接舉例子:
          比如n = 3, k = 3
          我們要由num = [1, 2, 3]這三個數(shù)組成!
          首先我們要確定首位置是什么?我們整體看一下所有數(shù);
          1. "123"

          2. "132"

          3. "213"

          4. "231"

          5. "312"

          6. "321"

          我們發(fā)現(xiàn)當首數(shù)字確定了,后面和首數(shù)字組成數(shù)字的個數(shù)相等的!
          比如: 首數(shù)字為1,后面有組成兩個數(shù)123,132,可以組成2個數(shù).當首數(shù)字為2,3同樣都是.
          所有我們要找k = 3的數(shù)字 ,我們只需要?3/2?便可找到首數(shù)字什么,
          下面依次類推! Java代碼如下:


          class?Solution?{
          ????public?String getPermutation(int?n, int?k) {
          ????????List num = new?ArrayList<>();
          ????????for?(int?i = 1; i <= n; i++) num.add(i);
          ????????int[] factorial = new?int[n];
          ????????factorial[0] = 1;
          ????????for?(int?i = 1; i < n; i++) factorial[i] = i * factorial[i-1];
          ????????n--;
          ????????StringBuilder res = new?StringBuilder();
          ????????while?(n >= 0){
          ????????????int?t = factorial[n];
          ????????????int?loc = (int) (Math.ceil((double) k / (double) t)) - 1;
          ????????????if?(loc == -1) loc = num.size() - 1;
          ????????????res.append(num.get(loc));
          ????????????num.remove(loc);
          ????????????k %= t;
          ????????????n--;
          ????????}
          ????????return?res.toString();
          ????}
          }

          好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力。


          上期推文:


          LeetCode1-50題匯總,速度收藏!
          LeetCode刷題實戰(zhàn)51:N 皇后
          LeetCode刷題實戰(zhàn)52:N皇后 II
          LeetCode刷題實戰(zhàn)53:最大子序和
          LeetCode刷題實戰(zhàn)54:螺旋矩陣
          LeetCode刷題實戰(zhàn)55:跳躍游戲
          LeetCode刷題實戰(zhàn)56:合并區(qū)間
          LeetCode刷題實戰(zhàn)57:插入?yún)^(qū)間
          LeetCode刷題實戰(zhàn)58:最后一個單詞的長度
          LeetCode刷題實戰(zhàn)59:螺旋矩陣 II


          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲成人77777 | 国产伦精品一区二区三区最新章节 | 美女高潮喷水影院 | 黄色网页在线视频 | 色AV欲|