<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)526: 優(yōu)美的排列

          共 437字,需瀏覽 1分鐘

           ·

          2022-02-16 23:28

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

          今天和大家聊的問題叫做?優(yōu)美的排列,我們先來看題面:
          https://leetcode-cn.com/problems/beautiful-arrangement/

          Suppose you have n integers labeled 1 through n. A permutation of those n integers perm (1-indexed) is considered a beautiful arrangement if for every i (1 <= i <= n), either of the following is true:


          perm[i] is divisible by i.

          i is divisible by perm[i].


          Given an integer n, return the number of the beautiful arrangements that you can construct.

          ?假設有從 1 到 n 的 n 個整數(shù)。用這些整數(shù)構造一個數(shù)組 perm(下標從 1 開始),只要滿足下述條件 之一 ,該數(shù)組就是一個 優(yōu)美的排列 :
          • perm[i] 能夠被 i 整除

          • i 能夠被 perm[i] 整除

          給你一個整數(shù) n ,返回可以構造的 優(yōu)美排列 的 數(shù)量 。

          示例? ? ? ? ? ? ? ? ? ? ? ? ?

          示例 1:
          輸入:n = 2
          輸出:2

          解釋:
          第 1 個優(yōu)美的排列是 [1,2]:
          ????- perm[1] = 1 能被 i = 1 整除
          ????- perm[2] = 2 能被 i = 2 整除
          第 2 個優(yōu)美的排列是 [2,1]:
          ????- perm[1] = 2 能被 i = 1 整除
          ????- i = 2 能被 perm[2] = 1 整除

          示例 2:
          輸入:n = 1
          輸出:1


          解題

          https://www.cnblogs.com/linrj/p/13972877.html

          題目說了N不會超過15,這就是在暗示我們用DFS。
          直接DFS出1~N的排列,然后判斷一下是否滿足條件。
          不過這里要剪枝一下,不需要枚舉出所有的排列之后逐個判斷,對于某個排列的某一位u,如果已經(jīng)不滿足條件了,即不滿足u % i == 0 或者 i % u == 0,那么就無需枚舉剩下的位。
          這題不加這個剪枝貌似會超時。
          代碼如下:

          class?Solution?{
          public:
          ????int?res = 0;
          ????int?n;
          ????vector<bool> visited; // 判斷某個數(shù)字是否已經(jīng)在當前排列出現(xiàn)過

          ????void?dfs(int?u, vector<bool>& visited)?{
          ????????if(u == n + 1) { // 找到一個滿足條件的排列,答案++
          ????????????++res;
          ????????????return?;
          ????????}
          ????????for(int?i = 1; i <= n; ++i) {
          ????????????if(visited[i] == false?&& ((u % i == 0) || (i % u == 0))) { // 當前數(shù)字沒有排列中出現(xiàn)過,且滿足題目要求的條件,則嘗試在當前位置放上數(shù)字i,再繼續(xù)搜索下一個位置
          ????????????????visited[i] = true;
          ????????????????dfs(u + 1, visited);
          ????????????????visited[i] = false;
          ????????????}
          ????????}
          ????}

          ????int?countArrangement(int?N)?{
          ????????n = N;
          ????????visited = vector<bool>(n + 1, false);
          ????????dfs(1, visited);
          ????????return?res;
          ????}
          };


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

          上期推文:
          LeetCode1-520題匯總,希望對你有點幫助!
          LeetCode刷題實戰(zhàn)521:最長特殊序列 I
          LeetCode刷題實戰(zhàn)522:最長特殊序列 II
          LeetCode刷題實戰(zhàn)523:連續(xù)的子數(shù)組和
          LeetCode刷題實戰(zhàn)524:通過刪除字母匹配到字典里最長單詞
          LeetCode刷題實戰(zhàn)525:連續(xù)數(shù)組

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  超碰免费操大逼 | eeuss一区 | 精品久久久久久久久久久久久久久久 | 人人爱天天操 | 91成人国产综合久久精品 |