需要考虑的点: 输入可能是正负,并且正负的取余机制不同,10%3=1, -10%3=2 切记!!
ord()转换为ASCII码,chr()ASCII码转换为原来的字符。
主要分为两个大类:ABA和ABC,各六种: ABC: ABC、ACB、BAC、BCA、CAB、CBA
ABA: ABA、ACA、BCB、BAB、CBC、CAC、
并且,可以准确看到,如果i-1行是ABC那么,i行的选择就可以是: CAB、BAC、BAB、BCB。也就是两类各两个。
如果i-1行是ABA的话,那么i行的选择可以是CAC、BAB、BCB、 CAB、BAC、也就是三个ABA,两个ABC。
class Solution:
def numOfWays(self, n: int) -> int:
### 回溯法
if n == 0:
return 0
dp = []
for i in range(n):
dp.append([0]*2) # 第0类代表ABC,第1类代表ABA。
dp[0][0] = 6
dp[0][1] = 6
for i in range(1, n):
dp[i][0] = (dp[i-1][0] * 2 + dp[i-1][1] * 2) % (10**9+7)
dp[i][1] = (dp[i-1][0] * 2 + dp[i-1][1] * 3) % (10**9+7)
return (dp[-1][0] + dp[-1][1]) % (10**9+7)
输入:
第一个是组数
第二个是nums的数目
第三个是nums
第四个是nums数目…
每次可以走一步或者两步,走一步则得到积分的一半。
举例
2
3
0 2 4
4
2 5 8 10
答案:
4
15
这道题要注意第一个数直接默认拿了,因为笔试的时候是0,没注意到这点,并且笔试的时候backtrack写错了…这么简单的题,居然被input给弄错了。唉。。。。。。教训:线下做题不要调试了,做不出来就弄到做出来。
class Solution:
def longest_distance(self, n, nums