已知一个由数字组成的列表,请将列表中的所有0移到右侧。
例如 move_zeros([1, 0, 1, 2, 0, 1, 3]) ,预期返回结果: [1, 1, 2, 1, 3, 0, 0]
附录力扣原题:
已知一个由数字组成的列表,请将列表中的所有0移到右侧。
例如 move_zeros([1, 0, 1, 2, 0, 1, 3]) ,预期返回结果: [1, 1, 2, 1, 3, 0, 0]
附录力扣原题:
取巧的实现方法:
备注:
key使用的是bool的方式排序,在Python中 0为False ,1为 True
蚊子老师的解法一:
解法二:
小佛学委解法:
move_zeros=[1, 0, 1, 2, 0, 1, 3]
a = len(move_zeros)
for i in range(a):
for j in range(0,a-1):
if move_zeros[j]==0:
move_zeros[j],move_zeros[j+1] = move_zeros[j+1],move_zeros[j]
print(move_zeros)
def move_zeros(sss: list):
for i in range(len(sss) - 1):
if sss[i] == 0: #判断是否是0
sss.remove(sss[i]) #如果是则删除0
sss.append(0) #在最后追加0
return sss
assert move_zeros([0, 1, 0, 3, 12]) == [1, 3, 12, 0, 0]
assert move_zeros([0, 0, 0, 3, 12]) == [3, 12, 0, 0, 0]
assert move_zeros([1, 5, 2, 3, 12]) == [1, 5, 2, 3, 12]
用的是冒泡排序,思路比较凌乱,但结果是正确的。
代码仅限于此题,换另一个题目就不适用了。局限性太大
麻烦老师们看看对不对,有没有可以完善的地方
#将列表中的0元素移至最右
def move_zero(list_a):
num=0
res=[]
for i in range(len(list_a)):
if list_a[i]!=0:
res.append(list_a[i])
num=num+1
for i in range(len(list_a)-num):
res.append(0)
return res
assert move_zero([0, 1, 0, 3, 12])==[1,3,12,0,0]
用冒泡法冒个泡~
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i in range(len(nums)-1):
for j in range(0,len(nums)-i-1):
if nums[j] == 0:
nums[j],nums[j+1] = nums[j+1],nums[j]
用双指针法再优化一下,冒泡法用的时间和空间太多了~
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
# 用于记录位置的指针
j = 0
for i in range(len(nums)):
# 不是0的话就跟记录的指针交换位置:让数字往前移
if nums[i]!=0:
nums[j],nums[i] = nums[i],nums[j]
# 已经完成好交换位置
j += 1
# 指针j会因为nums[i]==0 导致 j跟len(nums)是相等的,那么需要把j后面的位置让0补上
for i in range(j,len(nums)):
nums[j] = 0
一个字:绝
public List<Integer> moveZero(List<Integer> integerList) {
int count = 0;
for (int i = 0; i < integerList.size(); i++) {
if (integerList.get(i) == 0) {
integerList.remove(i);
count++;
}
}
for (int i = 0; i < count; i++) {
integerList.add(0);
}
return integerList;
}
list1=[0,1,3,5,9,0,2,2,3]
list2=list1.sort(reverse=True)
print(list2)#返回为None
print(list1)#[9, 5, 3, 3, 2, 2, 1, 0, 0]
list1=[0,1,3,5,9,0,2,2,3]
for i in range(len(list1)):
if list1[i]==0:
list1.insert(-1,list1[i])
list1.pop(i)
def move_zeros(list_num):
j = 0
for i in range(len(list_num) - 1):
if list_num[j] == 0:
list_num.append(list_num.pop(j))
print(list_num)
j -= 1
j += 1
def move_zeros(numlist:list):
count=numlist.count(0)
tmp_list=[0]*count
while count!=0:
numlist.remove(0)
count-=1
numlist.extend(tmp_list)
return numlist
def solution(ls: list):
for i in range(ls.count(0)):
ls.remove(0)
ls.append(0)
return ls
def move0Right(lst):
new = []
new0 = []
for i in range(len(move_zeros)):
if move_zeros[i] != 0:
new.append(move_zeros[i])
else:
new0.append(move_zeros[i])
for j in range(len(new0)):
new.append(new0[j])
print(new)
move_zeros = [1, 0, 1, 2, 0, 1, 3]
move0Right(move_zeros)
预先格式化的文本
S1:
S2: