算法
两数求和
【题目】
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
【示例】
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
【程序】
#方法一暴力解决
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
length=len(nums)
for i in range(length):
for j in range(i+1,length):#range(start,stop,step)
if nums[i]+nums[j]==target:
return [i,j]
#方法二利用切片
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
length=len(nums)
for i in range(length):
y=target-nums[i]
if y in nums[i+1:]:#利用切片
return [i,nums.index(y,i+1)]#从i+1开始搜索元素y的索引
# 哈希,把target-num放入dic中,循环for如果有num在dic内,
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dic = {}
for i, num in enumerate(nums):
if num in dic:
return [dic[num], i]
else:
dic[target - num] = i
- 切片
list_name[start:stop:step]
默认step为1- range
range(start,stop,step)
默认start为0- index
字符串.index(元素,start,stop)- enumerate
enumerate(列表或元祖或字符串,start=n)seasons = ['Spring', 'Summer', 'Fall', 'Winter'] list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] list(enumerate(seasons, start=1)) # 小标从 1 开始 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
整数反转
【题目】
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
【实例】
输入: 123
输出: 321
输入: -123
输出: -321
输入: 120
输出: 21
【程序】
class Solution:
def reverse(self, x: int) -> int:
s=str(abs(x))
result=0
j=1
for a in s[::-1]:
result=int(a)*(10**(len(s)-j))+result
j=j+1
if x<0:
result=-result
else:
result=result
if result<(2**31-1) and result>(-(2**31)):
return result
else:
return 0
class Solution:
def reverse(self, x: int) -> int:
s=str(abs(x))
result=0
j=1
for a in s[::-1]:
result=int(a)*(10**(len(s)-j))+result
j=j+1
result=result if x>0 else -result
result=result if result<(2**31-1) and result>(-(2**31)) else 0
return result
回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
class Solution:
def isPalindrome(self, x: int) -> bool:
s=str(x)
s2=s[::-1]
if s==s2:
return True
else:
return False