Python 3
用Python 3初学算法,通过LeetCode。
Python 3语法技巧学习
list
语法 | 作用 |
---|---|
【:】 | 复制整个list |
【i:j】 | 复制list中的第i个到第j个 |
【::-1】 | 逆序复制整个list |
【i:j:k】 | 复制list中的第i个到第j个,步长为k |
x in list_name | 判断元素x是否在list中 |
for _ in range (n)
’_’ 是一个循环标志,也可以用i,j 等其他字母代替,下面的循环中不会用到,起到的是循环此数的作用
1. 两数之和
本人代码,代码思想为暴力遍历,从【1】+【2】,【1】+【3】……【1】+【n】,再到【2】+【3】,【2】+【4】……【2】+【n】…所有情况中找相等的值,一旦找到即退出,寻找原下标:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
sorted_nums: List[int] = nums[:]
sorted_nums.sort()
temp = [0, 0]
result = [0, 0]
found = False
found1 = False
found2 = False
for i in range(len(nums)):
for j in range(len(nums) - 1, 0, -1):
if sorted_nums[i] + sorted_nums[j] < target:
break
elif sorted_nums[i] + sorted_nums[j] == target:
temp[0] = sorted_nums[i]
temp[1] = sorted_nums[j]
found = True
break
if found:
break
for i in range(len(nums)):
if nums[i] == temp[0] and not found1:
found1 = True
result[0] = i
elif nums[i] == temp[1] and not found2:
found2 = True
result[1] = i
if found1 and found2:
break
return result
优解代码,使用哈希表存储,寻找(target - 当前值)与已有哈希表中对应的值:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashset={
}
for i in range(len(nums)):
if hashset.get(target-nums[i]) is not None :
return [hashset.get(target-nums[i]),i]
hashset[nums[i]]=i