以前我写python都是直接写的这次看到实例里第一题就有class有点懵了我以为只有java才要定义class呢不过这还好 紧接着我又碰到了几个问题 现在把我的思考和解答写在下面
而且不知道为什么定义的时候还要写self 很奇怪 因为定义的时候需要调用的时候用不用感觉很麻烦
解:
self代表类的实例,而非类 在引用方法的时候创建的类的实例会被传入self中所以要定义一个self
实例来说明
class Test:
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
执行结果如下
<__main__.Test object at 0x000000000284E080>
<class '__main__.Test'>
从上面的例子中可以很明显的看出,self代表的是类的实例。而self.__class__则指向类
我觉得很好的一点是计算用时和内存用量 这让我有了提高算法的要求
第一种暴力解法
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if (nums[i]+nums[j])==target:
return [i,j]
测试的时候遇到了这个问题 TypeError: reverseInteger() missing 1 required positional argument: 'target'
其实实质是,定义的类没有初始化(或赋值)
解:
number = [2,7,11,5]
target = 9
#a = Solution()
print(Solution.twoSum(number,target))
使用时先实例化
number = [2,7,11,5]
target = 9
a = Solution()
print(a.twoSum(number,target))
第二种解法
利用字典键值对应的方式
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
d = {}
for i in range(len(nums)):
comp=target-nums[i]
if comp in d:
if (target-nums[i])!=nums[i]:
return [d[target-nums[i]],i]
d[nums[i]]=i
本来自己已经测试成功了
但是 我看错了题目 是不能用一个数字2次 但是如果用例里出现 [1,3,3,4] 而目标是6的时候应显示 [1,2]
而我这种算法会显示null 考虑的不严谨啊
改正了一下 除去了一行成功
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
d = {}
for i in range(len(nums)):
if target-nums[i] in d:
return [d[target-nums[i]],i]
d[nums[i]]=i