zoukankan      html  css  js  c++  java
  • 351. Android Unlock Patterns

        

    /* * 351. Android Unlock Patterns * 2016-7-12 by Mingyang * 这个题目真的是绝了,就Google想的出来,首先是dfs的思路,但是1,3,7,9看成一类 * 2,4,6,8看成一类,5单独看成一类,每一个长度的密码个数,就是以上三类之和。 * 那么我们除了需要visited数组以外,还需要一个skip数组,存两个数之间的点 * 选择一个数与选择另一个数的关键就在于,另一个数不能被访问,并且,要么另一个数是相邻的 * 数,要么另一个数是相隔一个数,并且两个之间的数已经被访问过了 * 注意:访问了2以后可以直接访问7,因为2与7之间没有相邻的数 */ // cur: the current position // remain: the steps remaining int DFS(boolean vis[], int[][] skip, int cur, int remain) { if(remain < 0) return 0; if(remain == 0) return 1; vis[cur] = true; int res = 0; for(int i = 1; i <= 9; ++i) { // If vis[i] is not visited and (two numbers are adjacent or skip number is already visited) if(!vis[i] && (skip[cur][i] == 0 || (vis[skip[cur][i]]))) { res += DFS(vis, skip, i, remain - 1); } } vis[cur] = false; return res; } public int numberOfPatterns(int m, int n) { // Skip array represents number to skip between two pairs int skip[][] = new int[10][10]; skip[1][3] = skip[3][1] = 2; skip[1][7] = skip[7][1] = 4; skip[3][9] = skip[9][3] = 6; skip[7][9] = skip[9][7] = 8; skip[1][9] = skip[9][1] = skip[2][8] = skip[8][2] = skip[3][7] = skip[7][3] = skip[4][6] = skip[6][4] = 5; boolean vis[] = new boolean[10]; int res = 0; // DFS search each length from m to n for(int i = m; i <= n; ++i) { res += DFS(vis, skip, 1, i - 1) * 4; // 1, 3, 7, 9 are symmetric res += DFS(vis, skip, 2, i - 1) * 4; // 2, 4, 6, 8 are symmetric res += DFS(vis, skip, 5, i - 1); // 5 } return res; }
  • 相关阅读:
    安装Kudu
    flume+kafka+spark streaming整合
    安装Kafka
    DataFrame格式化
    RDD/Dataset/DataFrame互转
    多个jar包合并成一个jar包的办法
    flume使用示例
    ecplise + hadoop 调试环境搭建
    web.xml文件加载顺序
    Web.xml配置参数详解
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5665846.html
Copyright © 2011-2022 走看看