LeetCode-165-比較版本號

雄獅虎豹發表於2022-04-02

比較版本號

題目描述:給你兩個版本號 version1 和 version2 ,請你比較它們。

版本號由一個或多個修訂號組成,各修訂號由一個 '.' 連線。每個修訂號由 多位數字 組成,可能包含 前導零 。每個版本號至少包含一個字元。修訂號從左到右編號,下標從 0 開始,最左邊的修訂號下標為 0 ,下一個修訂號下標為 1 ,以此類推。例如,2.5.33 和 0.1 都是有效的版本號。

比較版本號時,請按從左到右的順序依次比較它們的修訂號。比較修訂號時,只需比較 忽略任何前導零後的整數值 。也就是說,修訂號 1 和修訂號 001 相等 。如果版本號沒有指定某個下標處的修訂號,則該修訂號視為 0 。例如,版本 1.0 小於版本 1.1 ,因為它們下標為 0 的修訂號相同,而下標為 1 的修訂號分別為 0 和 1 ,0 < 1 。

返回規則如下:

  • 如果 version1 > version2 返回 1,
  • 如果 version1 < version2 返回 -1,
  • 除此之外返回 0。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:陣列遍歷

判斷過程如下:

  • 首先將兩個版本號按照 . 分割成版本陣列;
  • 然後獲取較小的陣列長度count,遍歷前count位陣列的值,判斷哪個版本大返回相應的值;
  • 如果前面count位的版本都一樣,則判斷count後面的位是否有不為0的,如果有,則返回相應的值;
  • 如果前面的版本號都一致,則返回0。
public class LeetCode_165 {
    public static int compareVersion(String version1, String version2) {
        // 將兩個版本號按照 . 分割成陣列
        String[] versions1 = version1.split("\\.");
        String[] versions2 = version2.split("\\.");

        // 獲取較小的陣列長度
        int count = versions1.length > versions2.length ? versions2.length : versions1.length;
        // 然後遍歷前count位陣列的值,判斷哪個版本大返回相應的值
        for (int i = 0; i < count; i++) {
            if (Integer.valueOf(versions1[i]) > Integer.valueOf(versions2[i])) {
                return 1;
            } else if (Integer.valueOf(versions1[i]) < Integer.valueOf(versions2[i])) {
                return -1;
            }
        }
        // 如果前面count位的版本都一樣,則判斷count後面的位是否有不為0的
        if (versions1.length > count) {
            for (int i = count; i < versions1.length; i++) {
                if (Integer.valueOf(versions1[i]) > 0) {
                    return 1;
                }
            }
        }
        if (versions2.length > count) {
            for (int i = count; i < versions2.length; i++) {
                if (Integer.valueOf(versions2[i]) > 0) {
                    return -1;
                }
            }
        }
        // 最後,說明版本一致,返回0
        return 0;
    }

    public static void main(String[] args) {
        String version1 = "1.01", version2 = "1.001";
        // 測試用例,期望輸出: 0
        System.out.println(compareVersion(version1, version2));
    }
}
【每日寄語】 年輕是一列出軌的快車,明知道自己會一頭撞上,還是會全速駕駛。所以在年輕的時候最好選擇自己想做得事,並努力完成它,從而體會其中成功的喜悅。

相關文章