【每日一题0609】已知一个由数字组成的列表,请将列表中的所有0移到右侧

已知一个由数字组成的列表,请将列表中的所有0移到右侧。
例如 move_zeros([1, 0, 1, 2, 0, 1, 3]) ,预期返回结果: [1, 1, 2, 1, 3, 0, 0]

附录力扣原题:
image

1 个赞

取巧的实现方法:
image
备注:
key使用的是bool的方式排序,在Python中 0为False ,1为 True

3 个赞

蚊子老师的解法一:
image

解法二:
image

小佛学委解法:
image

2 个赞

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]

image

用的是冒泡排序,思路比较凌乱,但结果是正确的。
代码仅限于此题,换另一个题目就不适用了。局限性太大

麻烦老师们看看对不对,有没有可以完善的地方

#将列表中的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]
1 个赞

用双指针法再优化一下,冒泡法用的时间和空间太多了~

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;
    }
1 个赞

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

:thinking:

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:
image
S2:
image