目录
1672. 最富有客户的资产总量
tips: sum函数可以直接用~
class Solution:
def maximumWealth(self, accounts: List[List[int]]) -> int:
maxSum=0 #记录下最大值
for a in accounts: #遍历每个客户
if sum(a)>maxSum: #当前客户资产总和大于记录的最大值
maxSum=sum(a)
return maxSum
1920. 基于排列构建数组
class Solution:
def buildArray(self, nums: List[int]) -> List[int]:
return [nums[i] for i in nums] # 这一句话解决问题
1. 两数之和
tips: 通过这个题可以 get 到字典的妙用,python中字典就是一种哈希结构,编程中用起来时间复杂度也比较低。
形象解释:(这个题就像是找老伴儿哈哈哈~~~)
列表中的每个人心里都知道自己的老伴儿应该是谁(如果target=8,当前这个数是2,它知道自己需要找到的是6)。
所以当遍历到这个人身上的时候,他就会去查一下字典,看看老伴儿在字典里吗,如果在,那这道题就结束了;
如果不在,那他就先把自己放到字典中(他的值是字典中独一无二的key),乖乖等着他的老伴儿来找他。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable=dict() # 创建一个字典
for i,num in enumerate(nums): # 遍历数组nums,每当遇到一个数num时
if target-num in hashtable: # 如果老伴儿(target-num)就在字典中
return [hashtable[target-num],i] # 问题结束,返回他俩各自的位置
else: # 老伴儿不在字典中
hashtable[num]=i # 那就把自己的信息以key(本身值大小)、value(下标位置)的形式存到字典中,等着他的老伴儿来找他
##### 二刷时的写法 #######
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
# 字典能很好的直接访问到,哪个元素在,哪个元素不在,而且还能帮你存放一个附加的value值
map_dict = {
} # 数值:下表
for i, num in enumerate(nums):
if target-num in map_dict:
return [i, map_dict[target-num]]
else:
map_dict[num] = i
9. 回文数
class Solution:
def isPalindrome(self, x: int) -> bool:
x_str=str(x) #把x转化成字符串
x_ver_str=''.join(reversed(x_str)) #用''.join(reversed(str))这个方式求逆序字符串
if x_str==x_ver_str:
return True
else:
return False
13. 罗马数字转整数
用两个字符组合代表数字的就那6个特例('IV,‘IX’,‘XL’,‘XC’,‘CD’,‘CM’),字符串中的每个字符要么就是跟后边字符形成特例,不然的话那就是单独自己代表一个数字。(所以只需要走一遍字符串,看看每个字符跟后边是否能组合,不能组合就单独累加)
class Solution:
def romanToInt(self, s: str) -> int:
mapDict={
'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,
'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900
}
countSum=0
i=0
while i<=len(s)-1: # 直到最后一位
if i+1<=len(s)-1: # 如果后边有数
# 取出这两个字母,看看是不是特例里中的
if s[i:i+2] not in mapDict.keys(): # 两位组合的不在,那只能单独成数
countSum+=mapDict[s[i]] #直接由s[i]这个字符在字典中定位到其值
i+=1 #指针后移一位
else:
countSum+=mapDict[s[i:i+2]