力扣 (LeetCode)-兩數(shù)之和,有效的括號(hào),兩數(shù)相加
Github來源:力扣 (LeetCode)|刷題打卡 | 求星星 ? | 給個(gè)??關(guān)注,??點(diǎn)贊,??鼓勵(lì)一下作者
[已開啟]任務(wù)一:刷題打卡 * 10 篇
大家好,我是魔王哪吒,很高興認(rèn)識(shí)你~~
哪吒人生信條:如果你所學(xué)的東西 處于喜歡 才會(huì)有強(qiáng)大的動(dòng)力支撐。
每天學(xué)習(xí)編程,讓你離夢(mèng)想更新一步,感謝不負(fù)每一份熱愛編程的程序員,不論知識(shí)點(diǎn)多么奇葩,和我一起,讓那一顆四處流蕩的心定下來,一直走下去,加油,2021加油!歡迎關(guān)注加我vx:xiaoda0423,歡迎點(diǎn)贊、收藏和評(píng)論
時(shí)間:3 月 1 日 ~ 3 月 13 日
前言
如果這篇文章有幫助到你,給個(gè)??關(guān)注,??點(diǎn)贊,??鼓勵(lì)一下作者,接收好挑戰(zhàn)了嗎?文章公眾號(hào)首發(fā),關(guān)注 程序員哆啦A夢(mèng) 第一時(shí)間獲取最新的文章
??筆芯??~
1. 兩數(shù)之和
一、題目描述:
給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 的那 兩個(gè) 整數(shù),并返回它們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是,數(shù)組中同一個(gè)元素不能使用兩遍。
你可以按任意順序返回答案。
示例 1:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因?yàn)?nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例 3:
輸入:nums = [3,3], target = 6
輸出:[0,1]
二、思路分析:

可以遍歷所有數(shù)字對(duì),雙重循環(huán)遍歷當(dāng)前值和另一個(gè)當(dāng)前值與目標(biāo)值是否相等,如果相等返回結(jié)果。
三、答案 代碼:
輸入數(shù)組,目標(biāo)值
// 暴力搜索
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
// 暴力枚舉
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i,j];
}
}
}
};
// 借助Object對(duì)象存儲(chǔ)
var twoSum = function(nums, target) {
let maps = {};
for(let i = 0; i < nums.length; i++) {
var index = nums.indexOf(target-nums[i]
if(index !== -1 && index !== i) {
return [i,index]
}
}
};
const twoSum = function(nums, target) {
const map = new Map();
for (let i = 0; i < nums.length; i++) {
const diff = target - nums[i];
if (map.has(diff)) {
return [map.get(diff), i];
}
map.set(num[i], i);
}
}
20. 有效的括號(hào)
一、題目描述:
給定一個(gè)只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。
有效字符串需滿足:
左括號(hào)必須用相同類型的右括號(hào)閉合。左括號(hào)必須以正確的順序閉合。
示例 1:
輸入:s = "()"
輸出:true
示例 2:
輸入:s = "()[]{}"
輸出:true
示例 3:
輸入:s = "(]"
輸出:false
示例 4:
輸入:s = "([)]"
輸出:false
二、思路分析
遍歷輸入字符串 如果當(dāng)前字符為左半邊括號(hào)時(shí),則將其壓入棧中 如果遇到右半邊括號(hào)時(shí),分類討論:
如棧不為空且為對(duì)應(yīng)的左半邊括號(hào),則取出棧頂元素,繼續(xù)循環(huán) 若此時(shí)棧為空,則直接返回false 若不為對(duì)應(yīng)的左半邊括號(hào),反之返回false
使用數(shù)組來模擬,入為push,出為pop,即是棧。
入為push,出為shift,即是隊(duì)列。






三、答案代碼
var isValid = function (s) {
while (s.includes("[]") || s.includes("()") || s.includes("{}")) {
s = s.replace("[]", "").replace("()", "").replace("{}", "");
}
s = s.replace("[]", "").replace("()", "").replace("{}", "");
return s.length === 0;
};
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
let valid = true;
const stack = [];
const mapper = {
"{": "}",
"[": "]",
"(": ")",
};
for (let i in s) {
const v = s[i];
if (["(", "[", "{"].indexOf(v) > -1) {
stack.push(v);
} else {
const peak = stack.pop();
if (v !== mapper[peak]) {
return false;
}
}
}
if (stack.length > 0) return false;
return valid;
};
匹配的過程,就是出棧的過程
2. 兩數(shù)相加
一、題目描述
給你兩個(gè) 非空 的鏈表,表示兩個(gè)非負(fù)的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲(chǔ)的,并且每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。
請(qǐng)你將兩個(gè)數(shù)相加,并以相同形式返回一個(gè)表示和的鏈表。
你可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開頭。
示例 1:
輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:
輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:
輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
二、思路分析
設(shè)立一個(gè)表示進(jìn)位的變量 carried,建立一個(gè)新鏈表,把輸入的兩個(gè)鏈表從頭往后同時(shí)處理,每?jī)蓚€(gè)相加,將結(jié)果加上 carried 后的值作為一個(gè)新節(jié)點(diǎn)到新鏈表后面,并更新 carried 值即可。
鏈表這種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)和使用 用一個(gè) carried 變量來實(shí)現(xiàn)進(jìn)位的功能,每次相加之后計(jì)算 carried,并用于下一位的計(jì)算
使用變量跟蹤進(jìn)位,并從包含最低有效位的表頭開始模擬逐位相加的過程。每個(gè)結(jié)點(diǎn)都包含一個(gè)數(shù)字,并且數(shù)字按位逆序存儲(chǔ)。
首先取出“+”左右兩邊兩個(gè)數(shù)的最低位,其次求出他們的和并作為輸出結(jié)果的最低位,并考慮將進(jìn)位加入代碼中,如果值不存在時(shí),將其設(shè)置為0,然后再進(jìn)行相加即可。
let val1 = l1.val
let val2 = l2.val
三、答案代碼
var addTwoNumbers = function (l1, l2) {
if (l1 === null || l2 === null) return null;
// 使用dummyHead可以簡(jiǎn)化對(duì)鏈表的處理,dummyHead.next指向新鏈表
let dummyHead = new ListNode(0);
let cur1 = l1;
let cur2 = l2;
let cur = dummyHead; // cur用于計(jì)算新鏈表
let carry = 0; // 進(jìn)位標(biāo)志
while (cur1 !== null || cur2 !== null) {
let val1 = cur1 !== null ? cur1.val : 0;
let val2 = cur2 !== null ? cur2.val : 0;
let sum = val1 + val2 + carry;
let newNode = new ListNode(sum % 10); // sum%10取模結(jié)果范圍為0~9,即為當(dāng)前節(jié)點(diǎn)的值
carry = sum >= 10 ? 1 : 0; // sum>=10,carry=1,表示有進(jìn)位
cur.next = newNode;
cur = cur.next;
if (cur1 !== null) {
cur1 = cur1.next;
}
if (cur2 !== null) {
cur2 = cur2.next;
}
}
if (carry > 0) {
// 如果最后還有進(jìn)位,新加一個(gè)節(jié)點(diǎn)
cur.next = new ListNode(carry);
}
return dummyHead.next;
};
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
let addOne = 0
let sum = new ListNode('0')
let head = sum
while (addOne || l1 || l2) {
let val1 = l1 !== null ? l1.val : 0
let val2 = l2 !== null ? l2.val : 0
let r1 = val1 + val2 + addOne
addOne = r1 >= 10 ? 1 : 0
sum.next = new ListNode(r1 % 10)
sum = sum.next
if (l1) l1 = l1.next
if (l2) l2 = l2.next
}
return head.next
};
四、總結(jié):
兩數(shù)之和,有效的括號(hào),兩數(shù)相加-題解!
回看筆者往期高贊文章,也許能收獲更多喔!
一個(gè)合格的初級(jí)前端工程師需要掌握的模塊筆記 Vue.js筆試題解決業(yè)務(wù)中常見問題 【初級(jí)】個(gè)人分享Vue前端開發(fā)教程筆記 長(zhǎng)篇總結(jié)之JavaScript,鞏固前端基礎(chǔ) 前端面試必備ES6全方位總結(jié) 達(dá)達(dá)前端個(gè)人web分享92道JavaScript面試題附加回答 【圖文并茂,點(diǎn)贊收藏哦!】重學(xué)鞏固你的Vuejs知識(shí)體系 【思維導(dǎo)圖】前端開發(fā)-鞏固你的JavaScript知識(shí)體系 14期-連肝7個(gè)晚上,總結(jié)了計(jì)算機(jī)網(wǎng)絡(luò)的知識(shí)點(diǎn)?。ü?6條)
??關(guān)注+點(diǎn)贊+收藏+評(píng)論+轉(zhuǎn)發(fā)??,原創(chuàng)不易,鼓勵(lì)筆者創(chuàng)作更好的文章
點(diǎn)贊、收藏和評(píng)論
我是Jeskson(達(dá)達(dá)前端),感謝各位人才的:點(diǎn)贊、收藏和評(píng)論,我們下期見!(如本文內(nèi)容有地方講解有誤,歡迎指出?謝謝,一起學(xué)習(xí)了)
我們下期見!
文章持續(xù)更新,可以微信搜一搜「 程序員哆啦A夢(mèng) 」第一時(shí)間閱讀,回復(fù)【資料】有我準(zhǔn)備的一線大廠資料,本文 http://www.dadaqianduan.cn/#/ 已經(jīng)收錄
github收錄,歡迎Star:https://github.com/webVueBlog/WebFamily
關(guān)注數(shù):10億+ 文章數(shù):10億+
粉絲量:10億+ 點(diǎn)擊量:10億+
微信群管理員請(qǐng)掃描這里
微信群管理員請(qǐng)掃描這里
喜歡本文的朋友,歡迎關(guān)注公眾號(hào) 程序員哆啦A夢(mèng),收看更多精彩內(nèi)容
點(diǎn)個(gè)[在看],是對(duì)小達(dá)最大的支持!
如果覺得這篇文章還不錯(cuò),來個(gè)【分享、點(diǎn)贊、在看】三連吧,讓更多的人也看到

