摘要:首先找整數部分的坐標段,和都指向初值,令和一直向后遍歷到小數點為止。然后用將的整數段轉化為數值,進行比較若結果為大于或小于關系,直接返回結果若結果為相等,進行小數部分的比較。
Problem
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.37Note
看到一個巧妙的解法,分享一下:
將version1,version2都轉換為char array,然后分別用兩個指針s1, i1和s2, i2展開循環。
首先找整數部分的坐標段,s1和s2都指向初值0,令i1和i2一直向后遍歷到小數點為止。
然后用Integer.valueOf(someStr.substring(s1, i1))將version1, version2的整數段轉化為數值,進行比較:若結果為大于或小于關系,直接返回結果;若結果為相等,進行小數部分的比較。
比較小數大小,只比高位即可,所以可以沿用這個循環,只需要繼續用i1和i2向后移動,同時賦坐標值給s1和s2。這樣轉化數值函數中的小數段每次遍歷就只有一個字符:str.substring(i1, i1),即str.charAt(i1)。
public class Solution { public int compareVersion(String version1, String version2) { char[] v1 = version1.toCharArray(); char[] v2 = version2.toCharArray(); int i1 = 0,i2 = 0; int s1 = 0,s2 = 0; while(i1 < v1.length || i2 < v2.length){ while(i1 < v1.length && v1[i1] != ".") i1++; while(i2 < v2.length && v2[i2] != ".") i2++; int a = s1 < v1.length ? Integer.valueOf(version1.substring(s1,i1)) : 0; int b = s2 < v2.length ? Integer.valueOf(version2.substring(s2,i2)) : 0; if(a > b) return 1; if(a < b) return -1; s1 = ++i1; s2 = ++i2; } return 0; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64789.html
摘要:注意因為方法輸入的是一個正則表達式所以不能直接用,而是要用,而的要轉義,所有要用代碼按照進行分割比對相應的子串如果某個版本號更長,判斷其多余部分是否是,如果不是,則較長的較大,否則是一樣的。 Compare Version Numbers Compare two version numbers version1 and version2. If version1 > version2...
Problem 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 an...
Problem 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 an...
摘要:題目要求也就是說,比較版本號。思路一利用通過方法將版本通過分隔開,然后將每一段版本從轉化為進行比較思路二自己實現轉化為自己實現將轉化為,可以通過循環的方式。這是一個基本的算法。 題目要求 Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 < ve...
摘要:建立兩個堆,一個堆就是本身,也就是一個最小堆另一個要寫一個,使之成為一個最大堆。我們把遍歷過的數組元素對半分到兩個堆里,更大的數放在最小堆,較小的數放在最大堆。同時,確保最大堆的比最小堆大,才能從最大堆的頂端返回。 Problem Numbers keep coming, return the median of numbers at every time a new number a...
閱讀 2864·2021-11-16 11:55
閱讀 2608·2021-09-29 09:34
閱讀 3405·2021-09-01 14:21
閱讀 3753·2019-08-29 12:36
閱讀 697·2019-08-26 10:55
閱讀 3959·2019-08-26 10:20
閱讀 1026·2019-08-23 18:19
閱讀 1194·2019-08-23 17:56