题目:
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题目属于简单级别,还是挺复杂的,思路:将字符串按照"."分割,将“.”之间的数字转化为整数,然后分别对应比较。例如:1.2和13.37,分别转化为数组[1,2]和[13,37],从前往后对应比较1比13小,这时就可以得出结论1.2<13.37,若相等,则继续向后比较。这里需要注意,若两个字符串转化的数组不等长,需要将短的数组后面补0,例如,1.1和1.1.0,前者转化为[1,1],后者是[1,1,0],这时需要将前者补齐为[1,1,0],然后再对应比较。代码如下:
public int compareVersion(String version1, String version2) { //.的个数 int dot_num1 = 0; int dot_num2 = 0; for(int i = 0;i<version1.length();i++) { if(version1.charAt(i)=='.') dot_num1 ++; } for(int i = 0;i<version2.length();i++) { if(version2.charAt(i)=='.') dot_num2 ++; } //按照.的位置截取子串 String arr1[] = new String[dot_num1+1]; String arr2[] = new String[dot_num2+1]; //记录每个字符串中的.的个数 int index1[] = new int[dot_num1+2]; int index2[] = new int[dot_num2+2]; int in1 = 1; index1[0] = -1; for(int i = 0;i<version1.length();++i) { if(version1.charAt(i)=='.') index1[in1++] = i; } index1[in1] = version1.length(); int in2 = 1; index2[0] = -1; for(int i = 0;i<version2.length();++i) { if(version2.charAt(i)=='.') index2[in2++] = i; } index2[in2] = version2.length(); //截取子串 int index = 0; for(int i = 0;i<index1.length-1;i++) { arr1[index++] = version1.substring(index1[i]+1,index1[i+1]); } index = 0; for(int i = 0;i<index2.length-1;i++) { arr2[index++] = version2.substring(index2[i]+1,index2[i+1]); } int len1 = arr1.length; int len2 = arr2.length; int max = len1>len2?len1:len2; //所有子串转化为整数形式 int num1[] = new int[max]; int num2[] = new int[max]; for(int i = 0;i<len1;i++) num1[i] = Integer.parseInt(arr1[i]); for(int i = 0;i<len2;i++) num2[i] = Integer.parseInt(arr2[i]); //长度不一,短的后面0补齐 /* * * * 例如1.0和1.0.0 * 前者生成的num1数组为[1,0] * 后者生成的num2数组为[1,0,0] * 这里将num1补齐为[1,0,0],便于比较 */ if(len1>=len2) { for(int i = len2;i<len1;i++) { num2[i] = 0; } } else { for(int i = len1;i<len2;i++) { num1[i] = 0; } } /*for(int i = 0;i<num2.length;i++) { System.out.println(num2[i]); } for(int i = 0;i<num1.length;i++) { System.out.println(num1[i]); }*/ for(int i = 0;i<max;i++) { if(num1[i]>num2[i]) return 1; if(num1[i]<num2[i]) return -1; } return 0; }