90. 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
分析:题目是让求给定的两个版本字符串的大小。刚开始的时候没有弄清楚题意,所以提交了几次没有通过,最后弄清楚,传进来两个只包含数字和点号的字符串,然后比较这两个版本号的大小。字符串中包含的点号的个数不确定。如1.0.1.01大于1.0.0.1;1.9大于1.0.1。

所以,首先就必须要将两个版本字符串,按照点号分割,然后分别把这两个分割后得到的字符串数组转变成其对应的整型数组表示各个级别的版本号。需要注意的是在这个地方整型数组的长度我设成了两个字符串中数组长度大的那个,这样的目的是为了比较方便。

	/**
	 * 比较两个版本字符串的大小,如果前面的大则返回1,后面的大则返回-1,相等则返回0. 
	 * 首先把给的两个版本号都拆分成对应的主版本号和副版本号,以字符'.'分割,将其对应成整型数组(以最长的长度为准)。
	 * 然后依次从index=0开始比较两个整型数组元素的大小。
	 */
public int compareVersion(String version1, String version2) {
		String[] vArr1;
		String[] vArr2;
		int[] vArr1Int;
		int[] vArr2Int;
		int size1 = 0;
		int size2 = 0;
		/*拆分version1得到主版本号和副版本号:注意字符'.'是转义字符*/
		if(version1.contains(".")){
			vArr1= version1.split("\\.");
		}else{
			vArr1 = new String[1];
			vArr1[0] = version1;
		}
		/*拆分version2得到主版本号和副版本号*/
		if(version2.contains(".")){
			vArr2 = version2.split("\\.");
		}else{
			vArr2 = new String[1];
			vArr2[0] = version2;
		}
		
		/*将String的数组变成长度一样的int型数组,以数组长的那个为准.size表示最终的版本号数组的长度*/
		size1 = vArr1.length;
		size2 = vArr2.length;
		int size = size1>size2?size1:size2;
		vArr1Int = new int[size];
		vArr2Int = new int[size];
		for(int i=0;i<size1;i++){
			vArr1Int[i] = Integer.parseInt(vArr1[i]);
		}
		for(int i=0;i<size2;i++){
			vArr2Int[i] = Integer.parseInt(vArr2[i]);
		}
		/*依次从数组的低位下标开始比较,知道比较出结果*/
		for(int i=0;i<size;i++){
			if(vArr1Int[i]!=vArr2Int[i]){
				return vArr1Int[i]>vArr2Int[i]?1:-1;
			}
		}	
		return 0;
    }


你可能感兴趣的:(90. Compare Version Numbers)