zoukankan      html  css  js  c++  java
  • 526. Beautiful Arrangement

    package LeetCode_526
    
    /**
     * 526. Beautiful Arrangement
     * https://leetcode.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.
    
    Example 1:
    Input: n = 2
    Output: 2
    Explanation:
    The first beautiful arrangement is [1,2]:
    - perm[1] = 1 is divisible by i = 1
    - perm[2] = 2 is divisible by i = 2
    The second beautiful arrangement is [2,1]:
    - perm[1] = 2 is divisible by i = 1
    - i = 2 is divisible by perm[2] = 1
    
    Example 2:
    Input: n = 1
    Output: 1
    
    Constraints:
    1. 1 <= n <= 15
     * */
    class Solution {
        /*
        * Solution: DFS, to check the numbers of 1-n if can match beautiful arrangement,
        * Time:O(2^n), Space:O(2^n)
        * */
        private var result = 0
    
        fun countArrangement(n: Int): Int {
            val used = BooleanArray(n+1)
            dfs(n,n,used)
            return result
        }
    
        private fun dfs(N: Int, n: Int, used: BooleanArray) {
            if (n == 0) {
                result++
                return
            }
            for (i in 1..N) {
                if (used[i] || i % n != 0 && n % i != 0) {
                    continue
                }
                used[i] = true
                dfs(N, n - 1, used)
                used[i] = false
            }
        }
    }
  • 相关阅读:
    形态学操作
    形态学腐蚀膨胀操作
    图像模糊操作
    OpenCV像素操作和图形绘制
    c++中char类型的取值范围
    二叉树基本操作
    剑指27 二叉树的镜像
    剑指26 树的子结构
    剑指24: 反转链表
    剑指22 链表倒数第k个节点
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/15202024.html
Copyright © 2011-2022 走看看