此篇文章將記錄我在LeeCode上刷過的題目與解答巫湘。
難度由簡單開始装悲。
兩數(shù)之和
給定一個整數(shù)數(shù)組 nums和一個目標(biāo)值 target,請你在該數(shù)組中找出和為目標(biāo)值的那兩個整數(shù)尚氛,并返回他們的數(shù)組下標(biāo)诀诊。
你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是阅嘶,你不能重復(fù)利用這個數(shù)組中同樣的元素属瓣。
const twoSum = function(nums, target){
//構(gòu)造map對象
const map = new Map()
//遍歷nums
for (let i = 0; i < nums.length; i++) {
let result = target-nums[i]
//判斷map中是否有result,有的話返回結(jié)果讯柔,沒有就將nums[i]作為key抡蛙,i作為value存入map中
if(map.has(result)) return [map.get(result), i]
map.set(nums[i],i)
}
}
整數(shù)反轉(zhuǎn)
給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)魂迄。
注意:
假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù)粗截,則其數(shù)值范圍為 [ ,
? 1]。請根據(jù)這個假設(shè)捣炬,如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0熊昌。
var reverse = function(x) {
let MIN = Math.pow(-2, 31)
let MAX = Math.pow(2, 31) - 1
if(x<0){
x = -x
let temp = x.toString().split('').reverse().join('');
if(temp < MIN || temp > MAX){
return 0
}else{
return -temp
}
}else{
let temp = x.toString().split('').
if(temp < MIN || temp > MAX){
return 0
}else{
return temp
}
}
};
回文數(shù)
判斷一個整數(shù)是否是回文數(shù)绽榛。回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)婿屹。
var isPalindrome = function(x) {
if(x<0){
//如果參數(shù)小于0灭美,那么倒序肯定不是回文數(shù)
return false
}else{
let arr = x.toString().split('')
if(arr[arr.length-1] === '0' && arr.length > 1) return false //轉(zhuǎn)化為數(shù)組后冲粤,如果長度大于0并且最后一位是0页眯,那么也不是回文數(shù)
if(arr.toString() === arr.reverse().toString()){
return true
}else{
return false
}
}
};
羅馬數(shù)字轉(zhuǎn)整數(shù)
羅馬數(shù)字包含以下七種字符: I厢呵, V, X碌奉, L赐劣,C哩都,D 和 M。
字符: 數(shù)值
I: 1
V: 5
X: 10
L: 50
C: 100
D: 500
M: 1000
通常情況下咐汞,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊化撕。但也存在特例约炎,例如 4 不寫做 IIII,而是 IV掠手。數(shù)字 1 在數(shù)字 5 的左邊贱傀,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地魁衙,數(shù)字 9 表示為 IX。這個特殊的規(guī)則只適用于以下六種情況:
- I 可以放在 V (5) 和 X (10) 的左邊纯蛾,來表示 4 和 9纵隔。
- X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90碰煌。
- C 可以放在 D (500) 和 M (1000) 的左邊芦圾,來表示 400 和 900俄认。
- 給定一個羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)夜焦。輸入確保在 1 到 3999 的范圍內(nèi)茫经。
var romanToInt = function(s) {
//先將特殊情況排列
const special = {
I: ['V', 'X'],
X: ['L', 'C'],
C: ['D', 'M']
}
// 以字符為key河闰,數(shù)字為value放入對象中
const map = {I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000}
//記錄上一次的字符
let last = ''
//存放每個字符對等數(shù)字的數(shù)組
const result = [];
// 遍歷參數(shù)s
for(let char of s){
//如果上一位字符存在special中姜性,并且所對應(yīng)的數(shù)組含有char,那么就屬于特殊規(guī)則弃酌,第一次遍歷不會成立儡炼!
if(special[last] && special[last].includes(char)){
//這里,其實(shí)IV === 4榜贴, 我們可以看作此時的V === 3唬党,依次類推
result.push(map[char] - (map[last] * 2))
}else{
result.push(map[char])
last = ''
}
//如果此次的char在special中存在,那么我們要準(zhǔn)備好他與下一位字符可能會是特殊規(guī)則
if(special[char]) {
last = char;
}
}
return result.reduce((a,b) => a+b)
};
反正這個方法很慢就是了-霜浴。-
最長公共前綴
編寫一個函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴乳蛾。
如果不存在公共前綴昼榛,返回空字符串 ""
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strs) {
if (strs.length === 0) return ''
//如果輸入數(shù)組只有一個元素永丝,那么這個元素本事就是最長公共前綴
if (strs.length === 1) return strs[0]
let result = '' //用來存放結(jié)果
strs.sort((a, b)=> a.length>b.length) //將輸入數(shù)組排序类溢,數(shù)組長度升序露懒,這樣我們可以以長度最短的字符串作為基準(zhǔn)
let shortest = strs[0]
// 雙循環(huán)遍歷懈词,當(dāng)輸入數(shù)組中其中一個字符串不包含這個字符辩诞,就return result译暂,結(jié)束程序
for( let i = 0; i < shortest.length; i++ ){
for( let j = 0; j < strs.length; j++){
if(shortest[i] !== strs[j][i]) return result
}
result += shortest[i]
}
return result
};
有效的括號
給定一個只包括'(',')'崎脉,'{'伯顶,'}','['灶体,']'
的字符串,判斷字符串是否有效蝎抽。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合路克。
左括號必須以正確的順序閉合。
注意空字符串可被認(rèn)為是有效字符串狭吼。
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
//有效的括號,多想一想我們就能明白刁笙,如果是有效的括號疲吸,那么必然字符串靠左的一部分是 ( or [ or {,
//如果不是這樣的峭梳,那么必然不是有效括號
const arr= [];
//如果參數(shù)s為空字符串,不會進(jìn)入循環(huán)葱椭,直接return
for(let i = 0; i < s.length; i++) {
let char = s.charAt(i)
if (char == '(' || char == '[' || char == '{'){
arr.push(char)
} else {
if(arr.length === 0) return false
//到這里時孵运,已經(jīng)不可能是 ( or { or [, 如果他與前一位是有效的括號蔓彩,那么他必定和 topChar匹配
let topChar = arr.pop()
if (char == ')' && topChar != '(') return false
if (char == ']' && topChar != '[') return false
if (char == '}' && topChar != '{') return false
}
}
//如果參數(shù)s是有效的字符串赤嚼,那么遍歷到最后,arr的length必定是0
return !arr.length;
};