题目描述
从排序数组中删除重复项
题目来源及自己的思路
我用这个代码实现从排序数组中删除重复项,就是LeetCode上的算法题,我先用for循环写,感觉思路没问题,但一直报错IndexError: list index out of range,后来查了下答案,只是把for改成了while,然后就通过了检查。这个是不是因为for循环range()函数中只会在第一次调用时计算len(nums),之后range的值就不会改变了。
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
这是for循环的:
1 nums = [1,1,1,2,3,1,1]
2 count = 0
3 if len(nums) == 1 or len(nums) == 0:
4 count = len(nums)
5 else:
6 for i in range(len(nums)-1):
7 print(len(nums))
8 if nums[i] == nums[i+1]:
9 del nums[i+1]
10 else:
11 count += 1
12
13 print(count)
error : IndexError: list index out of range
这是while正确的版本:
class Solution:
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
i = 0
if len(nums) == 1 or len(nums) == 0:
return len(nums)
else:
while i < (len(nums)-1):
if nums[i] == nums[i+1]:
del nums[i+1]
else:
i += 1
return
你期待的结果是什么?实际看到的错误信息又是什么?
还有一个小问题,我的while的代码,最后只写了return也能返回正确的结果,这是什么原因?是不是因为LeetCode他帮我补上了?新手,只学了下基础语法,有些地方搞不清楚,多谢各位大佬了!
你的第一个问题回答是 :是的, 他会先计算
range(len(nums)-1)
的值, 接下来再进行循环, 而 while 每执行一次, 都会判断条件是否为True
第二个问题: 可能你没 C语言的基础吧, return 的出现, 有两个含义: (1).返回要返回的值, (2).代表函数运行结束, 而此问题无需返回值, 功能全在函数体执行完毕, So不加return也可以
第三个问题: 知道为啥这么长时间没人回答你吗? 你有部分代码没有Markdown语法, 看起来很乱, 程序员最烦这个, 其次, 文字表述太长了, 大家真的不想看。。。。。。行吧, 就帮你到这里了