标签:http log input his 题解 ems bsp amp backtrac
原题链接在这里:https://leetcode.com/problems/beautiful-arrangement/description/
题目:
Suppose you have N integers from 1 to N. We define a beautiful arrangement as an array that is constructed by these N numbers successfully if one of the following is true for the ith position (1 <= i <= N) in this array:
Now given N, how many beautiful arrangements can you construct?
Example 1:
Input: 2 Output: 2 Explanation:
The first beautiful arrangement is [1, 2]:
Number at the 1st position (i=1) is 1, and 1 is divisible by i (i=1).
Number at the 2nd position (i=2) is 2, and 2 is divisible by i (i=2).
The second beautiful arrangement is [2, 1]:
Number at the 1st position (i=1) is 2, and 2 is divisible by i (i=1).
Number at the 2nd position (i=2) is 1, and i (i=2) is divisible by 1.
Note:
题解:
典型的backtracking. 用visited记录用过的位置, 挨个position往后permute. 遇到不合规矩的直接返回, 看能不能走到N.
Time Complexity: exponential. 每次走到最后才遇到不和规矩的backtrack回来.
Space: O(N).
AC Java:
1 class Solution { 2 int res = 0; 3 public int countArrangement(int N) { 4 if(N <= 0){ 5 return 0; 6 } 7 8 boolean [] visited = new boolean[N+1]; 9 dfs(visited, 1, N); 10 return res; 11 } 12 13 private void dfs(boolean [] visited, int pos, int N){ 14 if(pos > N){ 15 res++; 16 return; 17 } 18 19 for(int i = 1; i<=N; i++){ 20 if(!visited[i] && (i%pos==0 || pos%i==0)){ 21 visited[i] = true; 22 dfs(visited, pos+1, N); 23 visited[i] = false; 24 } 25 } 26 } 27 }
LeetCode Beautiful Arrangement
标签:http log input his 题解 ems bsp amp backtrac
原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/7624929.html