现有一个 3x3 规格的 Android 智能手机锁屏程序和两个正整数 m 和 n ,请计算出使用最少m 个键和最多 n个键可以解锁该屏幕的所有有效模式总数。
其中有效模式是指:
1、每个模式必须连接至少m个键和最多n个键;
2、所有的键都必须是不同的;
3、如果在模式中连接两个连续键的行通过任何其他键,则其他键必须在模式中选择,不允许跳过非选择键(如图);
4、顺序相关,单键有效(这里可能跟部分手机不同)。

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

案例

输入m=1,n=2,表示最少1个键,最多2个键,符合要求的键数是1个键和2个键,其中1个键的有效模式有9种,两个键的有效模式有56种,所以最终有效模式总数是9+56=65种,最终输出65。

import java.util.*;
public class Solution {/*** 实现方案* @param m int整型 最少m个键* @param n int整型 最多n个键* @return int整型*///用来存储两个键相连经过其他键情况private static int[][] arr = new int[10][10];//动态初始化boolean数组 默认值为falseprivate static boolean[] select = new boolean[10];public int solution (int m, int n) {// write code here//三行 1和3连线必须2已经连入arr[1][3] = arr[3][1] = 2;arr[4][6] = arr[6][4] = 5;arr[7][9] = arr[9][7] = 8;//三竖arr[1][7] = arr[7][1] = 4;arr[2][8] = arr[8][2] = 5;arr[9][3] = arr[3][9] = 6;//两条对角线arr[1][9] = arr[9][1] = 5;arr[3][7] = arr[7][3] = 5;//用于判断是否可以可以连入 二位数组 int默认值为0 没有跨节点下标为0就是trueselect[0] = true;if (m < 0 || n < m) {return 0;}// 1 3 7 9情况合并  2 4 6 8情况合并 5一种情况int total = 4 * calculateCount(m ,n, 1, 1) + 4 * calculateCount(m ,n, 2, 1)+ calculateCount(m ,n, 5, 1);return total;}private static int calculateCount(int min, int max, int start, int len) {int count = 0;if (len > max) {return 0;}if (len >= min) {count++;}select[start] = true;for (int i = 1; i < 10; i++) {//当前节点start没有被选人 并且开始节点start到当前节点i不是跨节点连接if (!select[i] && select[arr[start][i]]) {count = count + calculateCount(min, max, i, len + 1);}}select[start] = false;return count;}
}

[编程题]手机屏幕解锁模式vivo笔试题相关推荐

  1. vivo2020届在线编程考试—手机屏幕解锁模式(C++)

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

  2. vivo2020届春季校园招聘手机屏幕解锁模式

    vivo2020届春季校园招聘在线编程考试 [编程题]手机屏幕解锁模式 用Java解题,算出所有可能性包括无效的模式,如285是无效的,而528是有效的. vivo2020届春季校园招聘在线编程考试 ...

  3. 手机屏幕解锁模式 vivo2020中的试题

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

  4. python破解手机锁屏密码_手机屏幕解锁模式

    36 可以通过DFS的方式先计算出刚好按下n个键时有多少种组合,然后求出S[n]至S[M]的和. DFS的主要难度在于,下一步可以与当前的位置不直接相连.这时分两种情况: 1. 普通的八个方向 (上下 ...

  5. vivo笔试题(含答案)

    个人博客欢迎访问 总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,定期分享Java笔试.面试题 目录 编译依赖问题(90% -> AC) 自己的做法 分析一下错误 ...

  6. java等差数列求和递归_[编程题] 递归实现等差数列–招银面试题1

    [编程题] 递归实现等差数列–招银面试题1 递归实现等差数列–招银面试题 题目描述 使用递归实现一个球等差数列的和,要求,输入首项a,公差d,数列长度n,求出sum 示例 例如: 输入: 1 1 3 ...

  7. 4个顶级的华为/小米/OPPO/Vivo手机屏幕解锁工具软件

    有好几次用户发现自己被锁定在他们的华为/小米/OPPO/Vivo设备之外,我们知道这可能是一种非常可怕的体验.在这种情况下,找到安卓手机解锁软件,重新获得手机中重要数据和文件的访问权限.看看这篇文章, ...

  8. 大疆网上测评题库_大疆校招笔试题及参考(一个小编程题)

    大疆 科技的校招 笔试 题(的一个小编程题) 底下的答案仅供参考. // 两个小车,走一步能量消耗 1 ,方向为 1 向右, -1 为向左,首先输入路途长 度,然后输入两行,每行第一个为小车的能量,第 ...

  9. Android监听手机屏幕解锁和判断屏幕状态

    开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在AndroidManifest配置里面注册action为 android.intent.action.USER_PRES ...

最新文章

  1. OpenCV 图像采样 插值 几何变换
  2. 多媒体技术PI 第三期—网络传输线上圆桌
  3. linux-shell命令之chown(change owner)【更改拥有者】
  4. 【结论】棋盘(jzoj 2297)
  5. 对于局部变量_浅谈Shell函数中全局变量和局部变量
  6. vector的学习(系统的学习)
  7. 自定义NodeJS-C++ Addons使用说明
  8. 网络编程技术(技术总结)
  9. 工具类-BasePopupWindow
  10. splitter将winform窗体分为三列
  11. Swift复数计算器
  12. 【分享】女生教你怎么追MM--送给没有女朋友的来此灌水的GG们
  13. 计算机英语与普通英语,计算机英语和普通英语有什莫不同? – 手机爱问
  14. gitee基本使用方法(Tortoisegit)
  15. WeCenter 与 UCenter 对接
  16. 聊聊Android5.0中的水波纹效果
  17. streaing-kafka
  18. Resnet 残差网络使用案例
  19. 重点解码效果总结#####论文阅读——《Towards a Human-like Open-Domain Chatbot》
  20. 最全自建蚂蚁(leanote)笔记超详细步骤

热门文章

  1. 计算机考研怎样区别1 2 3,21考研常识:数一数二数三到底有什么区别?
  2. 华为端口聚合命令_华为端口聚合和trunk区别?
  3. 2017北京图书订货会会刊(参展商名录)
  4. IT痴汉的工作现状3-临时工
  5. 通过C语言解决简易的计算时间差问题
  6. Win10 开机输入密码后登入桌面就黑屏,只有鼠标可以移动, 打不开任务管理器,不用重装系统怎么修复?(已解决)十四个解决参考方案
  7. fastadmin的权限管理auth
  8. 上市公司A股H股交叉上市数据(更新至2022年)
  9. 职中选什么专业好_职业高中有哪些专业 男生读职高选择什么专业好就业
  10. 资源优化:资源平衡和资源平滑