Leetcode 165. Compare Version Numbers
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
Next challenges:
思路:按照"."先将version1和version2分别分割为字符串数组,然后一段一段比较,注意对于当前的一段可能会有前缀0的出现,比如"001"和"1"。另外将每一段转换为整数来处理是不可行的,比如"2.10000000000000000000000000000"和"2.1"。
代码:
1 public int compareVersion(String version1, String version2) { 2 String[] array1 = version1.split("\\."); 3 String[] array2 = version2.split("\\."); 4 int time = Math.max(array1.length, array2.length); 5 for(int i = 0; i < time; i++) { 6 String s1 = i < array1.length ? array1[i] : "0"; 7 String s2 = i < array2.length ? array2[i] : "0"; 8 //去掉前缀0 9 int j = 0; 10 while(j < s1.length() - 1 && s1.charAt(j) == '0') j++; 11 if(j > 0) s1 = s1.substring(j); 12 j = 0; 13 while(j < s2.length() - 1 && s2.charAt(j) == '0') j++; 14 if(j > 0) s2 = s2.substring(j); 15 16 if(s1.length() == s2.length()) { 17 for(int k = 0; k < s1.length() ; k++) { 18 if(s1.charAt(k) == s2.charAt(k)) continue; 19 return s1.charAt(k) > s2.charAt(k) ? 1 : -1; 20 } 21 }else{ 22 return s1.length() > s2.length() ? 1 : -1; 23 } 24 } 25 return 0; 26 }