手机有效解锁模式

题目:现有一个 3x3 规格的 Android 智能手机锁屏程序和两个正整数 m 和 n ,请计算出使用最少m 个键和最多 n个键可以解锁该屏幕的所有有效模式总数。
其中有效模式是指:

每个模式必须连接至少m个键和最多n个键;
所有的键都必须是不同的;
如果在模式中连接两个连续键的行通过任何其他键,则其他键必须在模式中选择,不允许跳过非选择键(如图);
顺序相关,单键有效(这里可能跟部分手机不同)。

输入:m,n
代表允许解锁的最少m个键和最多n个键
输出:
满足m和n个键数的所有有效模式的总数

题解很显然,解锁方式最多有∑i=19A9i种,每一种方式处理的时间复杂度是O(9)。
处理某一种方式的时候,只需要判断相邻的两个点的中间是否有点或者有点的情况下他是否已经经过了。
用C++的话使用dfs即可模拟出所有情况。
但是Python有一个很优秀的库itertools里面有permutations函数可以很快速地去枚举所有的方式,只可惜Python速度太慢了,直接计算会TLE,见下面的代码。

class Solution {
public:
    /**
     * 实现方案
     * @param m int整型 最少m个键
     * @param n int整型 最多n个键
     * @return int整型
     */
    int total = 0, M, N;
    bool used[10];
    int id[10][2] = {
  {0, 0}, {1, 1}, {1, 2}, {1, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值