2018/11/11

935. Knight Dialer

问题描述:

A chess knight can move as indicated in the chess diagram below:

This time, we place our chess knight on any numbered key of a phone pad (indicated above), and the knight makes N-1hops.  Each hop must be from one key to another numbered key.

Each time it lands on a key (including the initial placement of the knight), it presses the number of that key, pressing Ndigits total.

How many distinct numbers can you dial in this manner?

Since the answer may be large, output the answer modulo 10^9 + 7.

样例:

Example 1:

Input: 1
Output: 10

Example 2:

Input: 2
Output: 20

Example 3:

Input: 3
Output: 46

Note:

  • 1 <= N <= 5000

问题分析:

本题难度为Medium!属于动态规划问题,已给出的函数定义为

class Solution:def knightDialer(self, N):""":type N: int:rtype: int"""

本题采取动态规划算法,每一步的电话数字与上一步的电话数字相关。nextNumbers本质上为一张查询表,nextNumber[i]存储了数字i下一步可以到达的数字;res[i]表示最后一步停留在数字i上的组合数(情况数),则sum(res)为最后输出,每一步都更新新的结果res=newRes;newRes是在上一步res的基础上当前这一步的结果。

代码实现:

#coding=utf-8
class Solution:def knightDialer(self, N):""":type N: int:rtype: int"""#当前数字可以跳到的下一个数字,例:nextNumbers[0]=[4,6]表示0的可以跳到数字4或6nextNumbers=[[4,6],[6,8],[7,9],[4,8],[3,9,0],[],[1,7,0],[2,6],[1,3],[2,4]] res = [1 for t in range(10)] #某一步数将走上其索引所在数字的所有情况的总数,初始化为第一步的结果for i in range(1,N): #对于第i步newRes = [0 for t in range(10)] #用来更新其总数情况。for number in range(10):for j in nextNumbers[number]:newRes[j] += res[number]res = newResreturn sum(res) % (10**9+7) #对输出取模

LeetCode Problems #935相关推荐

  1. 【LeetCode】935. Knight Dialer 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划TLE 空间换时间,利用对称性 优化空间复杂 ...

  2. leetcode dfs_深度优先搜索:具有6个Leetcode示例的DFS图遍历指南

    leetcode dfs Have you ever solved a real-life maze? The approach that most of us take while solving ...

  3. LeetCode 1166. 设计文件系统(哈希map)

    文章目录 1. 题目 2. 解题 1. 题目 你需要设计一个能提供下面两个函数的文件系统: create(path, value): 创建一个新的路径,并尽可能将值 value 与路径 path 关联 ...

  4. LeetCode 1233. 删除子文件夹

    1. 题目 你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹. 我们这样定义「子文件夹」: 如果文件夹 folder[ ...

  5. [LeetCode]小工具,统计数量,隐藏上锁的题目

    LeetCode Problems List没有统计数量的功能,顺手写了一个. 下面两段只是用jquery调整网页上显示的内容,刷新网页就没用了. 比如想看题目里一共有多少Easy, Medium和H ...

  6. 【Leetcode】精选算法top200道(二)

    二.中等 339.嵌套列表权重和 给定一个嵌套的整数列表 nestedList ,每个元素要么是整数,要么是列表.同时,列表中元素同样也可以是整数或者是另一个列表. 整数的 深度 是其在列表内部的嵌套 ...

  7. 好教程推荐系列:力扣LeetCode官网/labuladong的算法小抄/漫画算法小灰/刷题模板

    LeetCode官网 https://leetcode.com/ https://leetcode-cn.com/ labuladong的算法小抄 刷算法全靠套路,认准 labuladong 就够了! ...

  8. Leetcode 1233 删除子文件夹 (C++题解)

    你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹. 我们这样定义「子文件夹」: 如果文件夹 folder[i] 位于另 ...

  9. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

最新文章

  1. jenkins-为什么要持续集成
  2. 2019 年如何在 CentOS 7 上安装最新版 Nginx
  3. 中科院大牛带你玩转Python数据分析,大厂offer轻松拿!
  4. 2019ICPC(沈阳) - Fish eating fruit(树形dp+树根转移)
  5. 在Visual Studio 2010 中使用菱形向导对窗口进行布局
  6. C# 发出异步的Get请求
  7. 【开源项目】基于FFmpeg的PCM数据编码为AAC
  8. vscode代码库登录配置_VSCode 配置 Sonar Lint支持代码检查提效
  9. 信息安全——对称算法与非对称算法
  10. [翻译]SQL Server 该做和不该做的
  11. How to Run Mac OS X in VirtualBox on Windows
  12. 分布式存储系统学习笔记(三)—分布式键值系统(1)—Amazon Dynamo
  13. acs880变频器静态辨识_(完整版)ABB-ACS880变频器调试参数
  14. 软件测试工程师简历模板(三年经验)
  15. [技术随笔(二)] win10 回滚 win7 注意事项
  16. QtSQL的使用心得
  17. php挂马攻击,PHP批量挂马脚本
  18. open-flash-chart 与 FusionCharts 开发中使用(转)
  19. python实现最小二乘法的线性回归_Python中的线性回归与闭式普通最小二乘法
  20. 【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于物联网的GY906红外测温门禁刷卡系统

热门文章

  1. mac打开终端自动自执行命令
  2. 电子计算机机房施工及验收规范
  3. 简析脱 PEBundle 2.0x - 2.4x- Jeremy Collake
  4. HTML+CSS期末大作业:在线音乐网站设计——简洁大气的KK音乐官网模板html源码(1页) HTML+CSS+JavaScript
  5. goldengate——简介
  6. 阿里首推 Java 技术成长笔记,业内评级“钻石级”,还不来看?
  7. Python+Opencv:在视频上叠加一个背景透明Logo
  8. jython使用_使用Jython收集数据
  9. 西安交通大学matlab实验报告,matlab实验报告.doc
  10. 阿里大鱼php短信验证码,思梦PHP-阿里大鱼手机验证码