Day 63

第752题:

你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为  '0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。来源:力扣(LeetCode)

锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。

列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。

字符串 target 代表可以解锁的数字,你需要给出最小的旋转次数,如果无论如何不能解锁,返回 -1。

 

1、有四个转轮的密码锁,起始位0000,如果要将所有的组合全都枚举出来,首先扭动第一个转轮,可以得到1000,0100,0010,0001,9000,0900,0090,0009这8种;

  然后在这8个组合的基础上每个又可以各自生成8个不同的组合,那么最后会形成一棵树形的结构 ,里面包含了所有的数字组合;

  我们利用广度优先遍历遍历整棵树,来判断是否能到达指定的组合,当遇见deadends时就将跳过这个组合,遍历过的就标记上;

  最后如果能到达就返回转动次数,不行返回-1。

   

第674题:

给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度。(来自LeetCode)

 

 1、直接遍历数组,下一个数比这个数大就跳出,否则更新最长的序列长度;

  如果整个数组都是递增的那么在最后在更新一次结果;

  

2、动态规划,如果下一个递增,那么dp[i]=dp[i-1]+1,每次更新最长递增子序列长度。

  



posted @ 2020-09-08 21:28  Liang-Yi  阅读(124)  评论(0编辑  收藏  举报