阿里笔试

需要考虑的点: 输入可能是正负,并且正负的取余机制不同,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<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值