leetcode,2和3

cnwbcb6i  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(259)

错误:第9行的索引列表超出范围
尝试了一些改动,但仍然无法找出问题所在。谢谢你的帮助。代码:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        ans = []
        for i in nums:
            for j in nums:
                if i == j:
                    break
            **elif nums[i]+nums[j] == target:**
                    ans.append(i)
                    ans.append(j)
                j += 1
            i += 1
        return ans
iyr7buue

iyr7buue1#

您希望迭代索引,而不是值。改变 for 循环如下。同时也要去掉 ij . 增量由 range :

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        ans = []
        for i in range(len(nums)):
            for j in range(len(nums)):
                if i == j:
                    break
                elif nums[i]+nums[j] == target:
                    ans.append(i)
                    ans.append(j)
        return ans

添加 range 原因 ij 迭代列表索引而不是列表值。
请注意,您可以消除的循环测试 i == j 通过将内部范围更改为从开始 i+1 :

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        ans = []
        for i in range(len(nums)):
            for j in range(i+1, len(nums)):
                if nums[i]+nums[j] == target:
                    ans.append(i)
                    ans.append(j)
        return ans

如果要将列表中的索引配对,可以替换 append 致电:

ans.append((i, j))

这将把每一对附加为一个单独的两个元素 tuple ,而不是作为两个顶级列表值。
你也可以使用 itertools.combinations 为您处理嵌套循环。这是一个使用 itertools ,并将结果成对附加:

import itertools

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        ans = []
        for i, j in itertools.combinations(range(len(nums)), 2):
            if nums[i]+nums[j] == target:
                ans.append((i, j))
        return ans

虽然查看了问题描述,但它表示只有一个解决方案,因此您可以返回找到的第一个解决方案:

import itertools

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i, j in itertools.combinations(range(len(nums)), 2):
            if nums[i]+nums[j] == target:
                return i, j
        return None

相关问题