摘要:题目链接这道题做,关键是注意对称性,减少次数。同时注意第个条件这种情况发生在两个值的和差值没有的时候,也就是或者,也是同理。
Android Unlock Patterns
题目链接:https://leetcode.com/problems...
这道题dfs做,关键是注意对称性,减少dfs次数。同时注意第3个条件 No jumps through non selected key is allowed. 这种情况发生在两个值的x和y差值没有1的时候,也就是abs(nx-x) == 2或者abs(nx - x) == 0,y也是同理。
public class Solution { public int numberOfPatterns(int m, int n) { /* subproblem: dp[depth][i][j] = sum(dp[depth + 1][ni][nj]) if valid */ int count = 0; // start position: symmetry // 1, 3, 7, 9 and 2, 4, 6, 8 boolean[][] visited = new boolean[3][3]; count += dfs(m, n, 0, 0, 1, visited) * 4; count += dfs(m, n, 0, 1, 1, visited) * 4; count += dfs(m, n, 1, 1, 1, visited); return count; } private int dfs(int m, int n, int x, int y, int depth, boolean[][] visited) { int count = 0; if(depth == n) { count++; return count; } if(depth >= m) count++; visited[x][y] = true; // next step for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { if(!visited[i][j]) { // previous position was not visited if(Math.abs(i - x) != 1 && Math.abs(j - y) != 1 && !visited[(i+x)/2][(j+y)/2]) continue; count += dfs(m, n, i, j, depth + 1, visited); } } } visited[x][y] = false; return count; } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66637.html
摘要:这里只挑选那些每天日常用到的库,这些是每个开发新手必须知道的。新闻一个免费的新闻周报,能让你知道最前沿开发资讯。工具这是一个应用程序崩溃时,令程序自动发送一个格式的崩溃报告的库。一个新的开发环境,基于。 showImg(http://segmentfault.com/img/bVbG7a); 这里是一系列和 Android 应用开发相关的资源。这里只挑选那些每天日常用到的库,这些是每...
阅读 2282·2019-08-30 15:56
阅读 3116·2019-08-30 13:48
阅读 1128·2019-08-30 10:52
阅读 1497·2019-08-29 17:30
阅读 426·2019-08-29 13:44
阅读 3548·2019-08-29 12:53
阅读 1120·2019-08-29 11:05
阅读 2671·2019-08-26 13:24