LeetCode筆記:165. Compare Version Numbers

問(wèn)題:

Compare two version numbers version1 and version2.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.
You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.
Here is an example of version numbers ordering:

0.1 < 1.1 < 1.2 < 13.37

大意:

比較兩個(gè)版本號(hào) version1 和 version2火本。
如果 version1 > version2 就返回 ,如果 version1 < version2 就返回 -1,否則返回0娩缰。
你可以假設(shè)版本字符串是非空的而且只包含數(shù)字和 “.” 字符敷扫。
“.”字符不表示小數(shù)點(diǎn)突诬,是用來(lái)區(qū)分?jǐn)?shù)字序號(hào)的漫雷。
比如說(shuō)颂龙,2.5不是指超過(guò)2一半或者還有一半到版本3习蓬,而是第二個(gè)版本的第五次迭代。
這里是一個(gè)版本號(hào)順序的例子:

0.1 < 1.1 < 1.2 < 13.37

思路:

比較版本號(hào)實(shí)在系統(tǒng)開發(fā)中經(jīng)常用到的東西措嵌,題目中的例子給的其實(shí)有點(diǎn)不靠譜躲叼,版本號(hào)真正特殊的地方在于會(huì)存在多個(gè)小數(shù)點(diǎn),也就是會(huì)有 1.3.2 這種版本號(hào)存在企巢,真正要判斷大小的也是這類版本枫慷。

我們首先把兩個(gè)版本號(hào)字符串用 split 函數(shù)根據(jù)小數(shù)點(diǎn)分割成數(shù)組,注意要根據(jù)小數(shù)點(diǎn)區(qū)分不能直接只寫小數(shù)點(diǎn)浪规,還要用轉(zhuǎn)義符或听,否則無(wú)法分割,具體看下面的代碼笋婿。

然后依次比較每位數(shù)字的大小誉裆,只要出現(xiàn)同一個(gè)位置上某一方更大,就可以直接返回結(jié)果了缸濒。需要注意的是不能直接比較字符串足丢,需要轉(zhuǎn)成int去比較,因?yàn)轭}目會(huì)給出“000”這種多個(gè)0的情況庇配,字符串直接比較不了霎桅,轉(zhuǎn)成int后就都是0了。

當(dāng)某個(gè)版本號(hào)的數(shù)字全部比較完后讨永,看看另一個(gè)版本號(hào)還有沒有內(nèi)容,有的話也不能急著判斷是另一個(gè)大遇革,因?yàn)榇嬖?1.0 這種情況卿闹,它和 1 是一樣大的,就是多一位0萝快,那是不是只用判斷下一位是不是0呢锻霎,也不是,還有 1.0.1 的情況揪漩,它就比 1 大旋恼。所以,當(dāng)某個(gè)版本號(hào)還有剩余的時(shí)候奄容,我們要看看剩余的部分有沒有不是0的部分冰更,這里同樣必須轉(zhuǎn)成int去和0比較产徊,字符串無(wú)法全部囊括。

自己測(cè)試下面幾個(gè)用例就差不多了:

  • 1.1 和 1.2
  • 1 和 1.0
  • 1 和 1.0.1
  • 1.00.0 和 1.0
  • 1 和 1.00

代碼(Java):

public class Solution {
    public int compareVersion(String version1, String version2) {
        String[] arr1 = version1.split("\\.");
        String[] arr2 = version2.split("\\.");
        // System.out.println(arr1.length + " " + arr2.length);
        int i = 0;
        while (i < arr1.length && i < arr2.length) {
            // System.out.println(arr1[i] + " " + arr2[i]);
            int a = Integer.valueOf(arr1[i]).intValue();
            int b = Integer.valueOf(arr2[i]).intValue();
            if (a > b) return 1;
            else if (a < b) return -1;
            
            i++;
        }
        if (i < arr1.length) {
            while (i < arr1.length) {
                int version = Integer.valueOf(arr1[i]).intValue();
                if (version != 0) return 1;
                i++;
            }
            return 0;
        } 
        else if ( i < arr2.length) {
            while (i < arr2.length) {
                int version = Integer.valueOf(arr2[i]).intValue();
                if (version != 0) return -1;
                i++;
            }
            return 0;
        }
        else return 0;
    }
}

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁(yè)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜀细,一起剝皮案震驚了整個(gè)濱河市舟铜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奠衔,老刑警劉巖谆刨,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異归斤,居然都是意外死亡痊夭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門脏里,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)她我,“玉大人,你說(shuō)我怎么就攤上這事膝宁⊙荒眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵员淫,是天一觀的道長(zhǎng)合蔽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)介返,這世上最難降的妖魔是什么拴事? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮圣蝎,結(jié)果婚禮上刃宵,老公的妹妹穿的比我還像新娘。我一直安慰自己徘公,他們只是感情好牲证,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著关面,像睡著了一般坦袍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上等太,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天捂齐,我揣著相機(jī)與錄音,去河邊找鬼缩抡。 笑死奠宜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播压真,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼娩嚼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了榴都?” 一聲冷哼從身側(cè)響起待锈,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘴高,沒想到半個(gè)月后竿音,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拴驮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年春瞬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片套啤。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宽气,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潜沦,到底是詐尸還是另有隱情萄涯,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布唆鸡,位于F島的核電站涝影,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏争占。R本人自食惡果不足惜燃逻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望臂痕。 院中可真熱鬧伯襟,春花似錦、人聲如沸握童。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)澡绩。三九已至片效,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間英古,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工昙读, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留召调,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像唠叛,于是被迫代替她去往敵國(guó)和親只嚣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • Compare two version numbers version1 and version2. If ver...
    Eazow閱讀 256評(píng)論 0 0
  • 問(wèn)題 Compare two version numbers version1 and version2.If v...
    RobotBerry閱讀 299評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理艺沼,服務(wù)發(fā)現(xiàn)册舞,斷路器,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 孤獨(dú) 一個(gè)時(shí)常陪伴我的詞匯 現(xiàn)在一個(gè)人障般,放著網(wǎng)易云音樂 曾經(jīng)熱鬧的三人小寢调鲸,共十二個(gè)人,如今挽荡,卻只有我一個(gè)人藐石。 其...
    不希望任何人關(guān)注de七七閱讀 236評(píng)論 0 0
  • 2010-01-24 | 發(fā)布: 左岸 | 分類:創(chuàng)造之路 | 標(biāo)簽:書摘+技巧+閱讀 | 閱讀: 9,882 V...
    日求精進(jìn)閱讀 918評(píng)論 0 50