|
发表于 2020-3-9 17:20:27
|
显示全部楼层
- def solve(num):
- if not isinstance(num, int):
- return None
-
- s = str(num)
- ls = len(s)
- dp = [[0] * 2 for i in range(ls)]
- # dp[i][0]表示从左到右第i(下标)位如果不和前一位结合 有多少种可能
- # dp[i][1]表示从左到右第i(下标)位如果和前一位结合 有多少种可能
- # 对于dp[i][0]无论前面状态如何 每一种dp[i - 1]*的状态都会有dp[i][0]的状态
- # 所以dp[i][0] = dp[i - 1][0] + dp[i - 1][1]
- # 对于dp[i][1]如果与前一位可以结合 此时前一位不能和更前一位结合 故 dp[i][1] = dp[i - 1][0]
- # 如果当前位与前一位无法结合 则dp[i][1] = 0
- # i=0时无法与前面结合 dp[0][0] = 1 dp[0][1] = 0
- # 结果为dp[ls-1][0] + dp[ls - 1][1]
- dp[0][0] = 1
- for i in range(1, ls):
- dp[i][0] = dp[i - 1][0] + dp[i - 1][1]
- if 10 < int(s[i - 1] + s[i]) < 26:
- dp[i][1] = dp[i-1][0]
- return dp[ls - 1][0] + dp[ls - 1][1]
- print(solve(506))
复制代码
忘记前置0了 把‘06’算成一个数了 |
|