纯小白,纯记录,大佬勿喷Day3今天能把这二十道入门题完成吗?如完

前言

其实也不清楚学到哪里,要学什么,要从事哪个行业,甚至我喜不喜欢我都不清楚,但是想做便去做吧,顾虑太多反而不好了,就权当是打发这令人厌烦枯燥的时光吧
正如每个新人在接触编程时候笨拙的第一句hello world**

326.3的幂

延续上一题2的幂的思路,我们也不妨会想到取整..和取余%完成我们循环,但是这个循环还是很精妙,我代码翻译还是不行,这里else是可以删除的,也不影响判断

class Solution: def isPowerOfThree(self, n: int) -> bool:  
	if n <= 0: 
	
		return False 
		
	else:
	
		while n % 3 == 0: 
		
			n //= 3
			
		return n == 1 #缩了一个判断

其实回归到本质上来,无非就是能整除3,和不能整除3的,能整除的里面包含不是3的幂,只是3的倍数,最后只剩下余数的,而且余数绝对非0,不能整除的更简单了,一上来就有余数,先把负数和0讨论了,只需要写剩下的逻辑判断就好了,先把里面蕴含3的全部给去除,不就是整除3的循环吗,也就是说,n //= 3 是在循环里面的,但什么时候截止呢,当然是没法被整除了,翻译一下就是有余数,那么条件也写出来了,上文也写了如何判断是不是3的幂,就看最后的余数是不是1

这么一回顾,貌似,那张纸,画画图,连连线,归归类,更加清楚了——分类讨论恐怖如斯

递归,这块调用代码,复制粘贴也没意思,这部分需要补补

再者还有取对数运算,这确实没想到

看完了我的思路,我们还是看看大佬的思路吧,恐怖如斯……

class Solution:
 
	def isPowerOfThree(self, n: int) -> bool: 
	
		return n > 0 and 1162261467 % n == 0 
"""
作者:灵茶山艾府 链接:https://leetcode.cn/problems/power-of-three/solutions/2974674/o1-shu-xue-zuo-fa-yi-xing-gao-ding-pytho-w0uh/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
"""

但是思路却和上一题2的幂有点相似,都是发现一个独一无二的性质,便可以把复杂问题简单化。
231 <= n <= 231-1限定了一个范围,也就是说他不是无限放大的,而是有上限的,只要在这个上限内满足条件即可,其实从这里也能略微品味为什么这分在因数和倍数里面了,确实如此,幂运算中小的幂被大的幂所蕴含,为大幂的因数,而不是他的幂是不能被整除的

又长见识了,数论吗有点意思

还有高手其实

class Solution: 
	def isPowerOfThree(self, n: int) -> bool: 
	
		return n == 1 or n == 3 or n == 9 or n == 27 or n == 81 or n == 243 or n == 729 or n == 2187 or n == 6561 or n == 19683 or n == 59049 or n == 177147 or n == 531441 or n == 1594323 or n == 4782969 or n == 14348907 or n == 43046721 or n == 129140163 or n == 387420489 or n == 1162261467

完赛永远比半途而废要好啊,这又怎么说不是一种解决办法呢?甚至这种打表还有不用写法

class Solution: def isPowerOfThree(self, n: int) -> bool: 

	powers = [ 1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467] 
	
	return n in powers
# wxyz大佬打表 https://leetcode.cn/u/priceless-poincaresxe/

其实到这里,完全就如数学题一样了,答题思路有不同,就算相同的思路,最后写出来的代码实现路径也不同

漫漫长路,上下求索

丑数

class Solution:

    def isUgly(self, n: int) -> bool:
    
	    if n <= 0:

            return False

        while n % 2 == 0:

            n //= 2

        while n % 3 == 0:

            n //= 3

        while n % 5 == 0:

            n //= 5

        return n == 1

超出时间限制……很讨厌了
那只用换个思路了,其实也还比较好,3个循环浪费时间,那就减去循环数量,就好了,前面恰好也做了3的幂和2的幂
3的幂1162261467 % n == 0
2的幂 n& (n-1) == 0还是轻松的

1470.重新排列数组

其实一上来就有个想法,就是把这个列表对半分,然后你摘一个,我摘一个

class Solution:

    def shuffle(self, nums: List[int], n: int) -> List[int]:

        x = nums[:n]

        y = nums[n:]

        final = []

        k = 0

        for i in range(n):

            final.append(x[i])

            final.append(y[i])

        return final

当然也可以缩写成这样
return [num for i in range(n) for num in (nums[i], nums[n+i])]
amazing!

867.转置矩阵

我记得python好像一个库就是干这个工作的,专门解决矩阵问题
这道题思路,其实我感觉还好,把转这个动作翻译成为遍历,也就是把行变成列,同时角标不变
但奈何我是真不会基础知识

class Solution: def transpose(self, matrix: List[List[int]]) -> List[List[int]]: 

	m, n = len(matrix), len(matrix[0]) 
	ans = [[0] * m for _ in range(n)] 
	for i, row in enumerate(matrix): 
		for j, x in enumerate(row): 
			ans[j][i] = x 
	return ans 
	"""
	作者:灵茶山艾府 链接:https://leetcode.cn/problems/transpose-matrix/solutions/3655185/jian-dan-ti-jian-dan-zuo-pythonjavaccgoj-5ipt/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
	"""

1422.分割字符串的最大得分

看到这道题其实也是比较好翻译的

class Solution:

    def maxScore(self, s: str) -> int:

        score = []

        n = len(s)

        for i in range(1,n):

            left = list(s[:i])

            right = list(s[i:])

            score.append(left.count("0") + right.count("1"))

        return max(score)

优化

1.对于递归的学习
2.关于幂的运算,取对数,最大幂”吃掉“小幂,打表(穷举法)的熟悉
3.利用 n == 1进行bool运算

错题集

【错误】return结果放在循环内;【订正】记住要的是最后的结果,需要等循环结束,放在循环外
【错误】基础语法不知;【订正】菜鸟教程
【错误】range(1:n);【订正】不是列表,是range(1,n)

posted @ 2026-03-23 21:24  buyanwu  阅读(1)  评论(0)    收藏  举报