力扣Leecode1.两数求和(20190924)
序
学完python编程入门之后,一直想刷一下题,之后每天会坚持至少一道题,欢迎大神们的指正。
题目描述
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思路
(1)输入一个数组,根据len()得到数组长度。
(2)通过range(0,len(sums)-1)来遍历数组的索引。
#因为python索引是从0开始的,所以要0开始,到len-1结束
(3)两个for循环嵌套,遍历两次,最后通过if判断sums[i]==sums[j] and i!=j
#如果输入[1,2,3,4],target=2,可能会是1+1,所以要加上i!=j
(4)最后返回两个索引。
代码1#定义函数
def twoSum(nums,target):
for i in range(0,len(nums)-1):
for j in range(0,len(nums)-1):
if nums[i]+nums[j]==target and i!=j:
return [i,j]
nums=[2,7,11,15]
target=9
print(twoSum(nums,target))
输出:[0,1]
代码2#定义类
class Solution():
def __init__(self, nums, target):
self.nums = nums
self.target = target
def answer(self):
for i in range(0, len(self.nums) - 1):
for j in range(0, len(self.nums) - 1):
if self.nums[i] + self.nums[j] == self.target and i != j:
return [i, j]
input_output = Solution([2, 7, 11, 15],9)
print(Solution.answer(input_output))
print(input_output.answer())
输出:[0,1]
[0,1]
易错点
1.在调用类中的函数之前必须实例化对象,如果通过nums=[…],target=9分开实例化则会报错。
input_output = Solution([2, 7, 11, 15],9)
2.类名.类中的函数名(实例化对象)
Solution.answer(input_output)
3.实例化对象.类中的函数名()
如果函数是answer(self),则调用时直接answer(),因为类中的__init__(self,…)会将self传给answer。
如果函数是answer(self,name),则调用时需要answer(name),self同上。
c++代码:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for (int i = 0 ; i < int(size(nums)) ; i++)
{
for (int j = 0 ; j < int(size(nums)) ; j++)
{
if (nums[i] + nums[j] == target && i != j)
{
return {i , j};
}
}
}
return {};
}
};