very important python(VIP)
python是门上手容易些的语言,经过了一小段时间的学习,为了巩固所学的知识开始在leetcode上做题,毕竟Practice Make Prefect!
正式开始前必须吐槽下,作为一名计算机爱好者,博客本应该属于CSDN,但是不知浏览器的原因还是博客的原因,在Unbuntu下CSDN的行距实在是让我感到十分傻逼深恶痛绝!最终让我选择简书开始我的博客之旅。
leetcode #001 Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.
给定一组整数,将两个数的返回指数相加,使它们相加成一个特定的目标。您可以假设每个输入都有一个解决方案,您可能不会使用相同的元素两次。
例如:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
题目分析
题目中说到传入一个列表,及一个目标数,这个目标数等于列表中两个元素相加的和,但是不能是相同的元素相加。
假设列表 值为0,1,2,3,4 那么key也是0,1,2,3,4 这样就不会把自己搞晕,上了年纪学编程脑子不灵活了。然后让我们把每个相加的过程画出来。
列表的键和值总共有5个
0+1 与key为0的value相加可以总结为0+range(1,5)
0+2
0+3
0+4
1+2 与key为1的value相加可以总结为0+range(2,5)
1+3
1+4
2+3 与key为2的value相加可以总结为0+range(3,5)
2+4
3+4 与key为3的value相加可以总结为0+range(4,5)
可以将上述规律总结为共有两次循环!
-
第一次循环:
两数相加的第一个数的循环,0到3的循环,循环4次,因为不能两个相同的元素相加,所以不会出现list[4]+[4]的情况,也就不会出现第5次循环。假设m为第一个value的key,m=0,循环四次可以理解为:
m = 0
while m < 5-1:
m += 1 -
第二次循环:
两数相加的第二个数的循环,1234,234,34,4的循环,每当第一个数加1,第二个相加的数减少一个,由前向后减少。也因为不能两个相同的元素相加,所以不会出现list[0]+list[0]的情况,第二个数的第一个key为1,。假设m为第一个value的key,m=0,可以理解第二个数为:
for i in range(m+1,5):
list[i]
接下来将两个循环组合一下就完成了函数:
m = 0
while m < 5-1:
for i in range(m+1,5):
list[m] + list[i]
m += 1
做题
有了逻辑一切就变得简单了,根据leetcode的要求完成代码:
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
#第一个传入的数为列表,第二个传入的数为目标数
self.nums = nums
self.target = target
#获得list的长度,假设m为0就是从第一个下标开始
n = len(nums)
m = 0
#抛异常
try:
#断言语句判断传入第二个参数是否为int第一个参数是否为list
assert(type(target) == int)
assert(type(nums) == list)
#断言语句判断一个参数list中每个元素是否为int
for x in range(n):
assert(type(nums[x]) == int)
#抛异常出现上述断言语句为False时候的回答
except AssertionError as reason:
print('出错啦!nums必须为列表且列表中元素必须为int,target类型必须为int')
#抛异常当上述断言语句为True时候执行
else:
#带入刚刚分析出来的函数n为list长度
while m < n-1:
for i in range(m+1,n):
#判断两数相加是否与传入的第二个参数相等
nums_sum = nums[m] + nums[i]
#如果相等返回这两个value的key
if target == nums_sum:
return [m,i]
print("%d是nums[%d]与nums[%d]相加的和" % (target,m,i))
m += 1
上面有很多在做题事都是没必要的,只是为了巩固知识啰嗦了点。
网友评论