第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,每次更新最长递增子序列长度。