• 关于手机手势解锁共有多少种情况的分析


    • 题目:在九宫格中,任意两个数字可以直接连接,但是某些倾角为45°和90°的连接有特殊限制,例如,1要和3相连的前提是,2也会被连入。1要和9相连,5也会被连入。现在问题就是要求手势解锁共有多少种设置方案。

    解决思路:由于数字一共有九个,因此我们可以使用哈希将那些有特殊限制的点相连的情况存储下来,例如,在2还没有连入的情况下,是不允许1和3相连的,但在2连入的状态下,允许1和3相连。因此,我们将限制情况一 一存储到哈希表中,例如我们存储hash[1][3] = 2。在1要和3连接的时候,我们去判断hash[1][3]是否已经连入,已经连入则1 -> 3是合法的,否则不允许1 -> 3。

    import java.util.*;
    
    public class Solution {
    
        static int[][] hash = new int[10][10];
        static int step;
        static int ans;
        static boolean[] vis = new boolean[10];
    
        public static void dfs(int u) {
            if(step >= 4) {
                ans ++;
            }
            for(int i = 1; i <= 9; i ++) {
                if(!vis[i] && vis[hash[u][i]]) {
                    vis[i] = true;
                    step ++;
                    dfs(i);
                    vis[i] = false;
                    step --;
                }
            }
        }
    
        public static void main(String[] args) {
    
            hash[1][3] = hash[3][1] = 2;
            hash[1][7] = hash[7][1] = 4;
            hash[1][9] = hash[9][1] = 5;
            hash[2][8] = hash[8][2] = 5;
            hash[3][7] = hash[7][3] = 5;
            hash[3][9] = hash[9][3] = 6;
            hash[4][6] = hash[6][4] = 5;
            hash[7][9] = hash[9][7] = 8;
            for(int i = 1; i <= 9; i ++) {
                step = 1;
                vis[0] = true;
                vis[i] = true;
                dfs(i);
                Arrays.fill(vis, false);
            }
            System.out.println(ans);
        }
    
    }
    
    时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面…… 没有谁生来就是神牛,而千里之行,始于足下!
  • 相关阅读:
    C++学习之路:纯虚函数
    C++学习之路:虚函数与多态
    C++学习之路: 虚继承的内存的模型
    grep命令与正则表达式
    C++学习:lambda表达式入门
    wxWidgets在LINUX下的安装和demos的编译
    C++学习之路: STL探索之 reverse_iterator 的一个小陷阱
    JAVA入门:http基础
    sql入门
    C++学习之路: 构造函数详解与初始化列表
  • 原文地址:https://www.cnblogs.com/bianjunting/p/14801520.html
Copyright © 2020-2023  润新知