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;
};
学累了,看一看神仙姐姐,激励自己。
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;
};