一、笔记部分
思路:
暴力找全部
只要满足条件就往下走,直到找出一种情况,然后结果就+1。显示找一对,然后一路走,发现一对超过了范围,那么只能走1。因此会用到两个dfs
dfs(i+2,s),dfs(i+1,s) 。
这种易超时。
动态规划:
1.要找出所有的解码可能,就是找出一段数字所有的组合。暴力可以用两个循环,解决 。排列组合的规律
2.首先理解出题意 给出的字符串只有1-26有代表的含义,那么0 与27之后是没有含义的,但是双数可以拆分为两个单数,但是30 这种含0的是不能拆开的,因为拆开后0就没办法了,还有一个就是第一位不是是零因为是0的话,既不能拆,也不能表示出结果。
3.组合都是从前往后组合,那考虑后面的组合的数量,就相当于将前面的数量进行考虑,因为后面的组合有几个方式,是那种就按着那个递归式子走下去。用一个数组存储前i个解码字符的总数。
1.因为这个最大是两位数,所以自然想到从最后面的两位进行判定。符合正常逻辑都是从前往后进行组合。所以包含了这些数字的条件,都无法解码,因为我这边是无法解析特殊含0的数字。
2.因为考虑的是后两位,所以必定牵扯到前两位,i-2的位置,所以初始应该是从2,开始,dp[0]讲道理应该是没有输入字符串是否可以解码,但是前面已经将这个条件干掉了,这个dp[0]只是为了后面等于i=2的时候能够索引到i-2的解码数
3.既然考虑的是最后两位数,主要是为了考虑是否这两位数能拆否,不能拆就是前一种的结果。所以按照这个概念的话应该至少有三位数。
4.经典的条件判断,看最后两位数字是怎么样的,然后进行调用递归。
二、动态规划类型的高频面试题汇总:
https://blog.csdn.net/qq_40262372/article/details/112748995
三、各种类型的高频面试题汇总:
https://blog.csdn.net/qq_40262372/article/details/112556249