LeetCode 526. 优美的排列(回溯)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 526. 优美的排列(回溯)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
假設有從 1 到 N 的 N 個整數,如果從這 N 個數字中成功構造出一個數組,使得數組的第 i 位 (1 <= i <= N) 滿足如下兩個條件中的一個,我們就稱這個數組為一個優美的排列。條件:
- 第 i 位的數字能被 i 整除
- i 能被第 i 位上的數字整除
現在給定一個整數 N,請問可以構造多少個優美的排列?
示例1: 輸入: 2 輸出: 2 解釋: 第 1 個優美的排列是 [1, 2]:第 1 個位置(i=1)上的數字是1,1能被 i(i=1)整除第 2 個位置(i=2)上的數字是2,2能被 i(i=2)整除 第 2 個優美的排列是 [2, 1]:第 1 個位置(i=1)上的數字是2,2能被 i(i=1)整除第 2 個位置(i=2)上的數字是1,i(i=2)能被 1 整除 說明: N 是一個正整數,并且不會超過15。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/beautiful-arrangement
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 回溯
class Solution { public:int countArrangement(int N) {bool visited[N+1] = {false};//數字放過了嗎int count = 0;bt(1,N,visited,count);return count;}void bt(int i, int &N, bool* visited, int &count){ // i 表示填到第幾位了if(i == N+1){count++;return;}for(int num = 1; num <= N; ++num){if(!visited[num] && (num%i == 0 || i%num == 0)){visited[num] = true;bt(i+1, N, visited, count);visited[num] = false;}}} };總結
以上是生活随笔為你收集整理的LeetCode 526. 优美的排列(回溯)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 134. 加油站(贪心
- 下一篇: LeetCode 240. 搜索二维矩阵