leetcode:283 移动零

leetcode:283 移动零_第1张图片

第一种是我自己的解法,感觉自己做的题还是少,把简单的问题给复杂化了。唉!

使用快慢指针法:

初始条件让慢指针从0开始,快指针从1开始。以后移动每次使得慢指针都指向0这个数字的位置,快指针对应的数字则不为0,满足这样的条件就进行交换。

class Solution {
    public void moveZeroes(int[] nums) {
        /*
        if(nums==null||nums.length==1){
            return;
        }*/
        int fast=1;
        int slow=0;
        int temp=0;
       while(fast<nums.length&&slow<nums.length){//循环结束条件
           if(nums[slow]==0){//当慢指针为0时,让慢指针不动,找寻下一个不为零的值
               if(nums[fast]!=0&&slow<fast){//始终保持慢指针在前,快指针在后
                   temp=nums[fast];
                   nums[fast]=nums[slow];
                   nums[slow]=temp;
                   slow++;
                   fast++;
               }else{
                   fast++;
               }
           }else{
               slow++;
           }
       }
       System.out.println(Arrays.toString(nums));
    }
}

第二种:

public static void moveZeroes(int[] nums) {
		   ArrayList<Integer> list=new ArrayList<>();
	        for (int num : nums) {
	            list.add(num);
	        }
	        int start=0,end=nums.length-1;
	        for(int i=0;i<nums.length;i++){
	            int n=list.get(i);
	            if (n!=0){
	                nums[start++]=n;
	            }else {
	                nums[end--]=n;

	            }
	        }
	        System.out.println(Arrays.toString(nums));
	    }

第三种:

private static void moveZeroes(int[] nums) {
		// TODO Auto-generated method stub
		int start=0;
		for(int i=0;i<nums.length;i++) {
			if(nums[i]!=0) {
				nums[start++]=nums[i];
			}
		}
		for(int i=start;i<nums.length;i++) {
			nums[i]=0;
		}
		System.out.println(Arrays.toString(nums));
	}

你可能感兴趣的:(刷题)