class Solution:
def defangIPaddr(self, address: str) -> str:
return address.replace(".","[.]")
class Solution:
def runningSum(self, nums: List[int]) -> List[int]:
sum = 0 #使用sum记录前面和,避免重复运算
for i in range(len(nums)):
sum += nums[i]
nums[i] = sum
return nums
看了题解后发现可以省略掉sum变量,并且要避免修改原数据,更改为如下:
class Solution:
def runningSum(self, nums: List[int]) -> List[int]:
# 简单的dp
dp = [0] * len(nums) #避免修改原数据
dp[0] = nums[0]
for i in range(1,len(nums)):
dp[i] = dp[i-1] + nums[i]
return dp
三、3028.边界上的蚂蚁. - 力扣(LeetCode)
class Solution:
def returnToBoundaryCount(self, nums: List[int]) -> int:
ans = 0
sum = 0
for i in range(len(nums)):
sum += nums[i]
if sum == 0:
ans += 1
return ans
另:灵神代码. - 力扣(LeetCode)
class Solution:
def returnToBoundaryCount(self, nums: List[int]) -> int:
return sum(s == 0 for s in accumulate(nums))
解释:(来自chatgpt)
-
s == 0 for s in accumulate(nums)
是一个生成器表达式(generator expression),它会对accumulate(nums)
返回的累加结果进行迭代。对于每个迭代的值s
,它会判断是否等于 0,返回一个布尔值(True 或 False)。 -
在 Python 中,布尔值 True 被当作整数 1,而布尔值 False 被当作整数 0。因此,在这个生成器表达式中,每次
s
等于 0 时会返回 True(即值为 1),否则返回 False(即值为 0)。 -
最外层的
sum()
函数会对这些布尔值(0 或 1)进行求和操作。由于 True 被当作 1,False 被当作 0,所以最终的求和结果就是等于 0 的元素的个数。
四、1394.找出数组中的幸运数. - 力扣(LeetCode)
class Solution:
def findLucky(self, arr: List[int]) -> int:
# 哈希表
hash = [0] * 501 # 1 <= arr[i] <= 500
for i in range(len(arr)):
hash[arr[i]] += 1
for i in range(500,0,-1):
if hash[i] == i:
return i
return -1
上述代码使用的是数组作为哈希表,下一代码是使用字典作为哈希表(字典代码参考官方题解):
class Solution:
def findLucky(self, arr: List[int]) -> int:
# 题解代码
hash = dict()
for x in arr:
hash[x] = hash.get(x,0) + 1 #常用写法
ans = -1
for (k,v) in hash.items():
if k == v:
ans = max(ans,k)
return ans
五、1407.重新排列数组. - 力扣(LeetCode)
class Solution:
def shuffle(self, nums: List[int], n: int) -> List[int]:
# 模拟法
ans = [0] * (2*n)
for i in range(n):
ans[2*i] = nums[i]
ans[2*i+1] = nums[n+i]
return ans
在评论区里面看见了切片法,觉得很妙,一起粘贴在这里(侵权删):
class Solution:
def shuffle(self, nums: List[int], n: int) -> List[int]:
# 切片法
nums[::2],nums[1::2] = nums[0:n],nums[n:]
return nums
感谢你看到这里!一起加油吧!