「Leetcode系列」連女友看了都喜歡的五道題之:001, 007,009, 014, 020

image.png

前言:不少人說,作算法題沒用,實際又用不到。我作算法題前沒有女友,作了以後女友已經在我旁邊打呼嚕了,如今知道該幹啥了吧。嘿嘿。加油吧!!!你看看我長這樣都能找到女友,大家還等啥呢!算法

001.兩數之和

題目

image.png

思路

image.png

思路:先設一個map用來存儲,而後開始遍歷數組nums,把元素當作key,索引index當作value,存進map裏。當遍歷到map裏存在(target - 元素)這個key的這種狀況時,把這個key所對應的value以及當前元素對應的索引值一塊兒return數組

代碼

var twoSum = function(nums, target) {
    // 設置一個map用來存儲
    const map = new Map()
    for(let i = 0; i < nums.length ; i++) {
        // 計算target與當前元素的差值
        const chazhi = target - nums[i]
        if (map.has(chazhi)) {
            // 若是map裏存在差值爲key的狀況,直接返回
            return [map.get(chazhi), i]
        } else {
            // 若是不存在則繼續存儲進map裏
            map.set(nums[i], i)
        }
    }
};
複製代碼



007.整數反轉

題目

image.png

思路

思路:先把正負抽離出來,把該數字取絕對值,而後去進行不斷地對10取餘並拼在前方,最後再把正負納入返回值的判斷中(注意區間)markdown

代碼

var reverse = function(x) {
    // 判斷該數字正數或者是負數
    const flag = x < 0 ? -1 : 1
    // old:對該數字取絕對值,方便後面以正數來計算
    let old = Math.abs(x)
    // new:用來存儲新數字
    let now = 0
    while (old > 0) {
        // old每次都對10取餘,而且now乘10與之相加
        now = now * 10 + old % 10
        // 而後old除以10並取floor,準備下一次運算
        old = Math.floor(old / 10)
    }
    // 正負運算
    now = flag * now
    // 判斷是否超出區間
    return now < Math.pow(-2, 31) || now > Math.pow(2, 31) - 1 ? 0 : now
};
複製代碼



009.迴文數

題目

image.png

思路

image.png

思路:雙指針法,設置start與end指針,向中間靠攏,對應的元素不等就返回false,全都相等就返回trueapp

代碼

var isPalindrome = function(x) {
    // 先把數字轉爲字符串,便於遍歷
    let numStr = x.toString()
    // 首位指針設置
    let start = 0, end = numStr.length - 1
    while(start < end) {
        // 一檢測到首位不相同就返回false
        if (numStr[start] !== numStr[end]) return false
        // 不然雙指針向中間靠攏
        start++
        end--
    }
    // 都相同那就返回true嘍
    return true
};
複製代碼



014.最大公共前綴

題目

image.png

思路

image.png

思路:ui

代碼

var longestCommonPrefix = function (strs) {
    // 若是strs長度爲0則直接返回空字符串
    if (!strs.length) return ''
    // longPrefix:用來存儲最長前綴
    let longPrefix = ''
    let i = 0
    // 以第一個單詞爲基準進行遍歷
    while (strs[0][i]) {
        // 單詞的每個字母
        let first = strs[0][i]
        if (strs.some(item => item[i] !== first)) {
            // 遍歷strs,只要有一個單詞的第i個字母跟第一個單詞的第i哥字母不同就返回當前longPrefix
            return longPrefix
        } else {
            // 不然,longPrefix繼續拼接
            longPrefix += first
        }
        i++
    }
    return longPrefix
};
複製代碼



020.有效的括號

題目

image.png

思路

image.png

思路:map存儲左括號爲key,右括號爲value,遍歷字符串,左括號狀況則把左括號對應的value壓進數組,右括號狀況則判斷彈出數組的前元素是否跟自身同樣,不同的話直接返回falseurl

代碼

var isValid = function(s) {
    // 若是s長度是奇數,不可能閉合,直接返回false
    if (s.length % 2 !== 0) return false
    // 設置一個map存儲,左括號爲key,右括號爲value
    map.set('(', ')')
    map.set('[', ']')
    map.set('{', '}')
    const map = new Map()
    // 設置一個數組,用來遍歷壓棧
    const res = []
    for (let i = 0; i <= s.length; i++) {
        let item = s[i]
        if (map.has(s[i])) {
            // 左括號狀況,直接push進數組
            res.push(item)
        } else {
            // 右括號狀況,且右括號與前面的元素不相同直接返回false
            if (map.get(res.pop()) !== item) {
                return false
            }
        }
    }
    return true
};
複製代碼

哎,各位可要注意身體哦,不要學的太着迷哦,留着身體之後能夠好好找女友,陪女友哦!spa

相關文章
相關標籤/搜索