165. Compare-Version-Numbers
difficulty: Medium
section pre{ background-color: #eee; border: 1px solid #ddd; padding:10px; border-radius: 5px; }
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.
You may assume the default revision number for each level of a version number to be 0
. For example, version number 3.4
has a revision number of 3
and 4
for its first and second level revision number. Its third and fourth level revision number are both 0
.
Example 1:
Input: version1 = "0.1", version2 = "1.1"
Output: -1
Example 2:
Input: version1 = "1.0.1", version2 = "1"
Output: 1
Example 3:
Input: version1 = "7.5.2.4", version2 = "7.5.3"
Output: -1
Example 4:
Input: version1 = "1.01", version2 = "1.001"
Output: 0
Explanation: Ignoring leading zeroes, both “01” and “001" represent the same number “1”
Example 5:
Input: version1 = "1.0", version2 = "1.0.0"
Output: 0
Explanation: The first version number does not have a third level revision number, which means its third level revision number is default to "0"
Note:
Version strings are composed of numeric strings separated by dots
.
and this numeric strings may have leading zeroes.Version strings do not start or end with dots, and they will not be two consecutive dots.
Method One
class Solution {
public int compareVersion(String version1, String version2) {
String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\.");
int size1 = v1.length;
int size2 = v2.length;
int maxSize = Math.max(size1, size2);
for(int i = 0; i < maxSize; i++) {
int i1 = i < size1 ? Integer.parseInt(v1[i]) : 0;
int i2 = i < size2 ? Integer.parseInt(v2[i]) : 0;
if( i1 != i2 ) {
return i1 > i2 ? 1 : -1;
}
}
return 0;
}
}
又一种写法
class Solution {
public int compareVersion(String version1, String version2) {
String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\.");
int p = 0;
while( p < v1.length || p < v2.length ) {
int curV1 = p < v1.length ? Integer.parseInt( v1[p]) : 0;
int curV2 = p < v2.length ? Integer.parseInt( v2[p]) : 0;
if(curV1 < curV2) {
return -1;
}
if(curV1 > curV2) {
return 1;
}
p++;
}
return 0;
}
}
Last updated
Was this helpful?