成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

它承受著該等級(jí)不該有的簡(jiǎn)單, leetcode 564 尋找最近的回文數(shù)

Mertens / 354人閱讀

摘要:給定一個(gè)整數(shù),你需要找到與它最近的回文數(shù)不包括自身。最近的定義為兩個(gè)整數(shù)差的絕對(duì)值最小。示例輸入輸出注意是由字符串表示的正整數(shù),其長(zhǎng)度不超過(guò)。如果有多個(gè)結(jié)果,返回最小的那個(gè)。

給定一個(gè)整數(shù) n ,你需要找到與它最近的回文數(shù)(不包括自身)。

“最近的”定義為兩個(gè)整數(shù)差的絕對(duì)值最小。

示例 1:

輸入: "123"
輸出: "121"
注意:

n 是由字符串表示的正整數(shù),其長(zhǎng)度不超過(guò)18。
如果有多個(gè)結(jié)果,返回最小的那個(gè)。

基礎(chǔ)思路:

n的中間位,如果n為奇數(shù),中間位是 n .length/ 2 - 0.5;如果為偶數(shù),其實(shí)是沒(méi)有中間位,但是在實(shí)際修改時(shí),中間位是 2個(gè): n .length/ 2和 n.length/ 2 - 1

n的幾種可能性 和 基本結(jié)果

問(wèn)題:

n的長(zhǎng)度 <= 18, 而js不支持這么大位數(shù)的計(jì)算

解決:

除了n不是回文數(shù)且不是10的n次冪的情況都用字符串做判斷

n不是回文數(shù)且不是10的n次冪的情況下, 因?yàn)橹挥衝的后半部分做了改變,所以只需要 

Math.floor(n.length/2  )位數(shù) 加減。但還需要考慮otherX的情況,otherX 可能會(huì)是 

x加或者減 10的 Math.floor(n.length/2  )次冪,所以最后計(jì)算位數(shù)為  Math.floor(n.length/2  ) + 1


代碼(很挫而且很~~~~~大一坨,還沒(méi)有注釋,也沒(méi)做過(guò)優(yōu)化,還是js版)

/**

@param {string} n

@return {string}

*/

var nearestPalindromic = function(n) {
    if( n.length === 1 ){
        return (parseInt( n ) - 1).toString()
    }
    let len = n.length
    let isOdd =  len % 2 === 0 ? false : true
    let c = Math.floor(len / 2)
    
    let s1 = n.slice(0 , (len % 2 === 0 ? len /2  : len / 2 - 0.5));
    let s2 = n.slice( len % 2 === 0 ? len /2 : len / 2 + 0.5 )
    let s1R = s1.split("").reverse().join("")
    let s2R = s2.split("").reverse().join("")
    
    let same = true
    let isZero = true
    let isNine= true
    
    for( let i = 1 ; i < n.length ; i++){
        if(n[i-1] !== n[i]) same = false
        if( i !== n.length - 1 && n[i] !== "0"){
            isZero = false
        }
        if( n[i] != 9){
            
            isNine= false
        }
    }
    if( (n[0] === "1" && n[n.length - 1] === "1" && isZero) ||(n[0] === "1" && n[n.length - 1] === "0" && isZero) ){
        
        let str = ""
        for( let i = 0 ; i < n.length-1 ; i++){
            str += "9"
        }
        return str
    }
    if( same && n[0] === "9"){
        let str = "1"
        for( let i = 0 ; i < n.length - 1 ; i++){
            str += "0"
        }
        return str + "1"
    }
    if( isNine ){
        let str = 1 + n[0] * 1
        for( let i = 0 ; i < n.length - 2 ; i++){
            str += "0"
        }
        return str + ( 1 + n[0] * 1)
    }
    if( s1 === s2R ){
        let s = n
        if( n[c] === "0"){
            if( isOdd ){
                s = s1 + "1" + s2
            }else{
                s = s1.slice(0, -1) + 1 + 1 + s2.slice(1)
            }
        }else if(n[c] === "9"){
            let nowL = (s1 * 1 + 1).toString()
            let nowR = nowL.split("").reverse().join("")
            if(isOdd){
                if( n[c-1] !== "9"){
                    return s = s1 + (n[c] - 1) + s2
                }
                return nowL + 0 + nowR 
            }
            return nowL + nowR 

            
        }else{
            if( isOdd ){
                s = s1 + (n[c] - 1) + s2
            }else{
                s = s1.slice(0, -1) + (n[c] - 1)+ (n[c] - 1) + s2.slice(1)
            }
        }
        return s
    }else{
        let now = parseInt(n[isOdd ? c : c -1 ] + s1R)
        let old = parseInt(n[isOdd ? c : c -1 ] + s2)
        let otherNow = 0
        let num = Math.pow(10, c)
        if( !isOdd ){
            num +=  (c - 1 === 0 ? 1 : Math.pow( 10, c - 1))
        }
        if(now > old){
            otherNow = now - num
        }else{
            otherNow = now + num
        }
        let otherNowS = otherNow, nowS = now

        let zeroO =  Math.floor(len / 2) + 1 - otherNow.toString().length
        let zeroN = Math.floor(len / 2) + 1 - now.toString().length

        for( let i = 0 ; i < zeroO ; i++){
            otherNowS = "0" + otherNow
        }
        for( let i = 0 ; i < zeroN ; i++){
            nowS = "0" + nowS
        }

        if(Math.abs(old - now) > Math.abs(old - otherNow)){
            
            return isOdd ? s1 + otherNowS : s1.slice(0, -1) + otherNowS
        }else if (Math.abs(old - now)  ===  Math.abs(old - otherNow)){
            let rNow = otherNow > now ? nowS : otherNowS
            return isOdd ? s1 + rNow : s1.slice(0, -1) + rNow
        }else{
            return isOdd ? s1 + nowS : s1.slice(0, -1) + nowS
        }
    }
    
    
    
        
};


結(jié)尾吐槽:

這道題現(xiàn)在在leetcode上,等級(jí)為困難,通過(guò)率7.7%,但感覺(jué)好多簡(jiǎn)單里的題都比它難。

再一個(gè)感覺(jué)自己這篇博客也沒(méi)寫(xiě)明白啊,要是我看到這種東西肯定就罵街了,得再思考著改改嗚嗚嗚

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95805.html

相關(guān)文章

  • JS算法題之leetcode(1~10)

    摘要:先去空白,去掉空白之后取第一個(gè)字符,判斷正負(fù)符號(hào),若是英文直接返回,若數(shù)字則不取?;匚臄?shù)題目描述判斷一個(gè)整數(shù)是否是回文數(shù)?;匚臄?shù)是指正序從左向右和倒序從右向左讀都是一樣的整數(shù)。 JS算法題之leetcode(1~10) 前言 一直以來(lái),前端開(kāi)發(fā)的知識(shí)儲(chǔ)備在數(shù)據(jù)結(jié)構(gòu)以及算法層面是有所暫缺的,可能歸根于我們的前端開(kāi)發(fā)的業(yè)務(wù)性質(zhì),但是我認(rèn)為任何的編程崗位都離不開(kāi)數(shù)據(jù)結(jié)構(gòu)以及算法。因此,我作為...

    SoapEye 評(píng)論0 收藏0
  • LeetCode - 009 - 回文數(shù)(palindrome-number)

    摘要:最后,我們判斷一開(kāi)始的兩種情況,并返回或者即可。本許可協(xié)議授權(quán)之外的使用權(quán)限可以從處獲得。 Create by jsliang on 2019-05-22 19:30:42 Recently revised in 2019-05-23 11:42:52 一 目錄 不折騰的前端,和咸魚(yú)有什么區(qū)別 目錄 一 目錄 二 前言 三 解題 ?3.1 解題 - 數(shù)組操作 ...

    hikui 評(píng)論0 收藏0
  • 前端 | 每天一個(gè) LeetCode

    摘要:在線網(wǎng)站地址我的微信公眾號(hào)完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個(gè)題。這是項(xiàng)目地址歡迎一起交流學(xué)習(xí)。 這篇文章記錄我練習(xí)的 LeetCode 題目,語(yǔ)言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號(hào): showImg(htt...

    張漢慶 評(píng)論0 收藏0
  • leetcode刷題(python解題)-----9.回文數(shù)

    摘要:題目判斷一個(gè)整數(shù)是否是回文數(shù)?;匚臄?shù)是指正序從左向右和倒序從右向左讀都是一樣的整數(shù)。示例輸入輸出示例輸入輸出解釋從左向右讀為。進(jìn)階你能不將整數(shù)轉(zhuǎn)為字符串來(lái)解決這個(gè)問(wèn)題嗎來(lái)源力扣鏈接著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。 題目: 判斷一個(gè)整數(shù)是否是回文數(shù)?;匚臄?shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: ...

    Kosmos 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<