LeeCode算法題

此篇文章將記錄我在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ù)值范圍為 [2^{31} , 2^{31} ? 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;
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末等孵,一起剝皮案震驚了整個濱河市流济,隨后出現(xiàn)的幾起案子腌闯,更是在濱河造成了極大的恐慌,老刑警劉巖姿骏,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘸泻,死亡現(xiàn)場離奇詭異,居然都是意外死亡并扇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門穷蛹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肴熏,“玉大人蛙吏,你說我怎么就攤上這事⊙蛔觯” “怎么了坯辩?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長却音。 經(jīng)常有香客問我,道長阿纤,這世上最難降的妖魔是什么夷陋? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任骗绕,我火速辦了婚禮,結(jié)果婚禮上酬土,老公的妹妹穿的比我還像新娘。我一直安慰自己叽唱,他們只是感情好微宝,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蟋软,像睡著了一般钟鸵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棺耍,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天蒙袍,我揣著相機(jī)與錄音害幅,去河邊找鬼。 笑死以现,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的佣赖。 我是一名探鬼主播憎蛤,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼纪吮,長吁一口氣:“原來是場噩夢啊……” “哼碾盟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晚胡,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓷患,沒想到半個月后遣妥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箫踩,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡境钟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年慨削,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磁椒。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡浆熔,死狀恐怖桥帆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情环葵,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站菊卷,受9級特大地震影響洁闰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扑眉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一聘裁、第九天 我趴在偏房一處隱蔽的房頂上張望弓千。 院中可真熱鬧,春花似錦洋访、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽善镰。三九已至,卻和暖如春乎完,著一層夾襖步出監(jiān)牢的瞬間品洛,已是汗流浹背桥状。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留转晰,地道東北人士飒。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓查邢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酵幕。 傳聞我的和親對象是個殘疾皇子扰藕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容