持续更新ing!
本博客刷题题目来源于github上一位大佬给出的题目, 因为相关JS版本的解法比较少,因此在这给出JS版本的题目答案,附刷题目录链接:https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%E6%95%B0%E7%BB%84%E4%B8%8E%E7%9F%A9%E9%98%B5.md..... 题目不限于给出的刷题目录,多增加了本人在刷题过程中遇到的典型题
20 有效括号
给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}‘ 组成
思路:使用栈来存放右括号,遍历字符串 步骤如下:
1.创建一个Map,把括号匹配放进去
2.创建一个Stack(array) ,用for循环遍历字符串,对于每一个字符,如果map里有这个key,那说明它是个左括号,从map里取得相应的右括号(为什么?),把它push进stack里,否则的话,它就是右括号,需要pop出栈顶字符然后看它是否等于当前的字符,如果不相符,则返回false
3.循环结束后,如果stack不为空,说明还剩一些左括号没有被闭合,返回false.否则返回true
var isValid = function(s) { // 创建括号配对关系 const mappings = new Map(); mappings.set(‘(‘,‘)‘); mappings.set(‘[‘,‘]‘); mappings.set(‘{‘,‘}‘); const stack = []; for(let i=0;i<s.length;i++){ // 若当前字符对应mappings里的左括号,则push进去对应的右括号 if(mappings.has(s[i])){ stack.push(mappings.get(s[i])); // 若为右括号,则pop出来并与当前字符比较,若相等就什么都不做,不相等返回false }else{ if(stack.pop()!=s[i]){ return false; } } } // 遍历完之后若stack中不为空,说明有的左括号没有被闭合,返回false if(stack.length!==0){ return false; } // 若不为空,返回true return true; };
415. 字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
提示:
num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
思路: 使用双指针来模拟人工计算,步骤如下:
1. 创建指针 i 指向 nums1 末位数字,j 指向 nums2末位数字。
2. i, j 数字相加,用进位就用 carry 来记录进位值,无则为 0。
3. 若产生进位,则当前数字为 (i+j)%10 的值。
4. 若遍历过程中,nums1 或 nums2 当前已无数字,则用 0 补位来计算。
var addStrings = function(num1, num2) { let i=num1.length-1, j=num2.length-1, carry=0, ans=[]; while(i>=0 || j>=0 || carry!==0){ let c1 = i>=0?num1.charAt(i)-‘0‘:0, c2 = j>=0?num2.charAt(j)-‘0‘:0; let sum = c1+c2+carry; ans.push(sum%10); carry=Math.floor(sum/10); i--; j--; } return ans.reverse().join(‘‘); };
原文:https://www.cnblogs.com/starboy13/p/14873310.html