4.10Leetcode日记

640.Solve the Equation
毫无技术含量的一题,基本上就是暴力解决的同时考验代码的能力,写了一个函数以后嫌麻烦没有继续写,有时间无聊可以写写,面试应该不会考这么无聊的题
5.和516是关于回文的题
第一题我用了中间扫两边的方法很简单
第二题为了考验自己我用了DP,结果发生了一个奇怪的bug

class Solution:
    def longestPalindromeSubseq(self, s: str) -> int:
        n = len(s)
        dp = [[0] * n]*n

        for i in range(n):
            dp[i][i] = 1
            for j in range(i - 1, -1, -1):
                if s[i] == s[j]:
                    dp[i][j] = dp[i - 1][j + 1] + 2
                else:
                    dp[i][j] = max(dp[i][j + 1], dp[i - 1][j])
        return dp[n - 1][0]

在这段代码中 dp=[[0]*n]n就是错的
dp=[o
n for i in range(n)]就是对的
问题是在Python里判断两个表达式是否相等返回是True
后来突然想起来Python的指针问题,于是发现使用乘法创建的矩阵,一行的变化会影响下一行的变化
原来列表乘法所生成的大列表中小列表之间的关系是引用
可是有趣的是小列表中的乘法却不是引用而是创建
这就很耐人寻味了,暂时也没想明白这是为啥
6. Z 字形变换
这道题的关键在于理清思路:
不要创建太复杂的矩阵,而直接用字符串列表来处理
第二不用考虑太复杂的计算过程,其实只要按照顺序用多个循环处理就可以了,重点就是何时进入怎样的循环

猜你喜欢

转载自blog.csdn.net/qq_43100883/article/details/89177921