力扣刷题 20 有效的括号(不用栈实现) 283 移动零 1480 一维数组的动态和(一种方法两种形式)

171 阅读3分钟

lecode 20.有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。

因为左括号必须以正确的顺序闭合。所以 [(]) 为 false。先进行判断字符串长度是否为偶数,如果不是则直接 returan false;是偶数,因为每个括号都是两个字符组成,所以遍历长度为 let length = len / 2;每次遍历找到对应的括号将它替换成""。

输入:s = "()[]{}"
输出:true
这种一次遍历就可以完成。

输入:s = "([{}])"
输出:true
先遍历一次,将{}替换
然后([]),将 [] 替换
然后(),将 () 替换。

输入:s = "[(])"
输出:false
没有找到一个左括号以正确的顺序闭合。
当全部替换后,判断长度是否为0

代码:

var isValid = function(s) {
	let len =s.length;
	if(len % 2 !==0 ){
		return false;
	}
 	let length = len / 2;
		for (let i = 0; i < length; i++) {
			s = s.replace("()", "");
			s = s.replace("{}", "");
			s = s.replace("[]", "");
		}

	return s.length === 0;
};

学累了,看一看神仙姐姐,激励自己。

d9eb-ixkvvue1872949.jpg

lecode 283.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

题解:

补零法:

就是把不是零的数字全都从nums[0]开始置换,然后在把后面的全部用0置换。因为题目要求不能复制新数组只能在原数组上修改。

// 补零法
var moveZeroes = function(nums) {
    let len= nums.length;
    let count=0;
    for(let i=0;i<len;i++){
        if(nums[i]!==0){
            nums[count]=nums[i];
            count++;
        }
    }
    for(let j=count;j<len;j++){
        nums[j]=0;
    }
    return nums;
};

删零补零法

就是把零全部删除,然后又在后面push(0) 注意事项: 因为删除之后,后面的数字要往前移一位,所以i--; 增加之后,因为0不需要重新遍历,遍历的长度减少一位,len--。

// 删零补零法
 var moveZeroes = function(nums) {
     let len= nums.length;
     for(let i=0;i<len;i++){
         if(nums[i]===0){
           nums.splice(i,1);
           nums.push(0);
           i--;
           len--;
         }
    };
    return nums;
}

lecode 1480.一维数组的动态和

给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。

示例 a

输入:nums = [1,1,1,1,1]
输出:[1,2,3,4,5]
解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1]

创立一个新的空数组。

新数组里的newnums[i]数据存放的是nums[0]~nums[i]的和。

let sum=0; sum = nums[i]+sum; 将sum一个一个的push放进新数组newnums[]里。

var runningSum = function(nums) {
        let sum=0;
        let newnums=[];
    for(let i=0;i<nums.length;i++){
        sum = nums[i]+sum;
        newnums.push(sum);
    }
    return newnums;
};

在原数组上进行修改

除了第一个,nums[i]=nums[i-1]+nums[i],返回nums。

var runningSum = function(nums) {
    for(let i=1;i<nums.length;i++){
       nums[i]=nums[i]+nums[i-1];
    }
    return nums;
};

新手入门,简单解题,先解决题目,日后再求改进。希望能给个赞鼓励一下。