android手势密码csdn,LeetCode 351. 安卓系统手势解锁(回溯)
文章目录
1. 题目
2. 解题
1. 题目
我们都知道安卓有个手势解锁的界面,是一个 3 x 3 的点所绘制出来的网格。
给你两个整数,分别为 m 和 n,其中 1 ≤ m ≤ n ≤ 9,
那么请你统计一下有多少种解锁手势,是至少需要经过 m 个点,但是最多经过不超过 n 个点的。
先来了解下什么是一个有效的安卓解锁手势:
每一个解锁手势必须至少经过 m 个点、最多经过 n 个点。
解锁手势里不能设置经过重复的点。
假如手势中有两个点是顺序经过的,那么这两个点的手势轨迹之间是绝对不能跨过任何未被经过的点。
经过点的顺序不同则表示为不同的解锁手势。
解释:
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
无效手势:4 - 1 - 3 - 6
连接点 1 和点 3 时经过了未被连接过的 2 号点。
无效手势:4 - 1 - 9 - 2
连接点 1 和点 9 时经过了未被连接过的 5 号点。
有效手势:2 - 4 - 1 - 3 - 6
连接点 1 和点 3 是有效的,因为虽然它经过了点 2 ,但是点 2 在该手势中之前已经被连过了。
有效手势:6 - 5 - 4 - 1 - 9 - 2
连接点 1 和点 9 是有效的,因为虽然它经过了按键 5 ,但是点 5 在该手势中之前已经被连过了。
示例:
输入: m = 1,n = 1
输出: 9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/android-unlock-patterns
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
参考官方题解,判断是否有效比较难写
class Solution {
vector visited;
public:
int numberOfPatterns(int m, int n) {
int ans = 0;
for(int len = m; len <= n; ++len)
{
visited = vector (9, false);
ans += cal(-1,len);
}
return ans;
}
bool isok(int idx, int last)
{
if(visited[idx]) return false;
if(last == -1) return true;//第一个数
if((idx+last)%2 == 1) return true;//相邻的两个数
int mid = (idx+last)/2;
if(mid == 4)//对角线的两个端点要连起来
return visited[mid];//看中点是否占用
if(idx%3 != last%3 && idx/3 != last/3)
return true;//不是 同行,或者 同列 的两个端点
return visited[mid];//检查0,6,中间是3,有没有被占用
}
int cal(int last, int len)
{
if(len == 0) return 1;
int sum = 0;
for(int i = 0; i < 9; ++i)
{
if(isok(i, last))
{
visited[i] = true;
sum += cal(i, len-1);
visited[i] = false;
}
}
return sum;
}
};
296 ms 6.1 MB
1,9, 389497
5,9, 387488, 有38万多种手势。
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
android手势密码csdn,LeetCode 351. 安卓系统手势解锁(回溯)相关推荐
- LeetCode 351. 安卓系统手势解锁(回溯)
文章目录 1. 题目 2. 解题 1. 题目 我们都知道安卓有个手势解锁的界面,是一个 3 x 3 的点所绘制出来的网格. 给你两个整数,分别为 m 和 n,其中 1 ≤ m ≤ n ≤ 9, 那 ...
- 351. 安卓系统手势解锁
我们都知道安卓有个手势解锁的界面,是一个 3 x 3 的点所绘制出来的网格. 给你两个整数,分别为 m 和 n,其中 1 ≤ m ≤ n ≤ 9,那么请你统计一下有多少种解锁手势,是至少需要经过 ...
- Leetcode——安卓系统手势解锁(九宫格)
1. 安卓系统手势解锁 (1)回溯(模版方法) // 至少 需要经过 m 个点,但是 不超过 n 个点的.class Solution {int count = 0;public int number ...
- android如果跳过锁屏,安卓系统再曝漏洞:任何人都可轻松绕过锁屏密码
IT之家讯 9月16日消息 安卓最近频曝安全漏洞,不过大部分漏洞都比较隐晦,而且这些安全隐患需要入侵者具有足够的技术水平才能被利用,所以用户大面积中招的可能性不大.然而今天来自美国德克萨斯州一所大学 ...
- android手势密码csdn,Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析...
Android手势密码LockPatternView.LockPasswordUtils.LockPatternUtils 在使用别人写的这个手势密码的时候,我们通常是有自己的需求,可能这里的代码很多 ...
- 云技术在android平台上的应用程序,安卓系统上的ERP云应用
一.安卓系统介绍 Android手机通常在底部会有最多4个功能键: 返回键:返回前一操作屏幕: 菜单键:弹出当前屏幕相关选项菜单: 主屏键:回到待机主屏幕: 搜索键:进行搜索. 现在的触摸屏一般都是电 ...
- win10手机系统 Android,Win10 Mobile内置完整安卓系统
原标题:Win10 Mobile内置完整安卓系统 前瞻科技快讯,微软将以何种方式完成移动平台通用程序以及对 iOS 和安卓应用的移植与兼容成为外界关注的焦点,近日有开发者在对最新镜像 Win 10 M ...
- android蓝牙键盘编辑,使用很麻烦 安卓系统蓝牙键盘使用技巧
[IT168 技术]安卓系统在蓝牙键盘支持方面就真是惨不忍睹了,因为很多原生安卓rom并没有集成HID蓝牙设备,对蓝牙键盘这类产品支持上存在不少缺陷.也导致目前市面上大多数的平板或者手机键盘只能服务苹 ...
- Android的折叠华为,微软发布安卓系统折叠手机,难超华为
睿财经讯(文/萧玮)10月3日,在刚刚结束的微软秋季发布会中展示了Surface产品,同时也推出了首款双屏电脑Surface Neo以及折叠屏手机Surface Duo. 安卓化的微软手机 微软秋季发 ...
- ios为什么比android快,苹果ios更新比安卓系统快的原因是什么?
标签:苹果手机(772)安卓(174)iOS(484)苹果(2818) 一言概之,苹果闭环,安卓开源. 对于手机系统来说,主流的基本上就只有Android和ios.虽然二者在系统体验上越来越趋于一致, ...
最新文章
- 使用navicat 11 出现不能返回存储过程结果的问题
- php框架所用到的核心概念,【PHP】PHP现代框架代表-Laravel框架核心技术特性
- Java 8 stream forEach filter anyMatch
- Jquery操作复选框总结
- mysql 导出dmp文件_一文带你了解MySQL主从复制(Master-Slave)
- 南通大学计算机组成原理期末考试题,南通大学计算机组成原理期末考试范围.docx...
- 玩转Go语言之数据类型转换
- Sql Server 的sa用户被禁用
- gradle安装及idea导入spring5.0x的源码
- wk一sm5时间温度控制器_吓人!用“御寒神器”取暖,竟上了手术台……注意!温度不高也会烫伤...
- 计算机在中医临床学的应用,中医临床学术论文(2)
- WPS如何去除分割线
- IPV6地址数据库导出
- GSoC 2022 Blender VSE: 第二、三周总结
- python3+selenium爬取笔记本电脑详情信息
- 企业邮箱“成员收发权限”功能详解【如何开通企业邮箱】
- 【飞郁2022新课程】23 - CE找偏移表达式
- 微信小程序开发拼图小游戏
- 遥感理论基础——电磁波(一)
- Docker镜像与容器的工作原理
热门文章
- 计算机专业认识实习目的,计算机专业实习目的与意义
- 聪明女婿VS刁蛮丈母娘之三十六计【转载】
- Windows2012安装AppFabric失败返回1603错误的解决方案
- Python 解析风云四A卫星L1级别数据以及绘制卫星云图
- 台式计算机网卡驱动不能正常使用,电脑网卡驱动程序不正常怎么办 网卡驱动程序不正常解决方法...
- delphi教程 | 第一个程序
- linux下运行vasp,VASP5.3.5 并行版本+VTST从头编译教程(完整版)
- swf转换为GIF格式
- 车票预订系统 搭建服务器,火车票网上订票系统的设计与实现.doc
- 超好用的网页浮动广告代码