zoukankan      html  css  js  c++  java
  • LeetCode_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.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;
    	}


  • 相关阅读:
    测试模式 windows2008 内部版本7601
    移动端UC /QQ 浏览器的部分私有Meta 属性
    正则表达式 正向预查 负向预查
    获取指定元素的某一个样式属性值
    把普通对象转换成json格式的对象
    求平均数-----类数组转换成数组
    轮播图
    倒计时
    JS 预解释相关理解
    ul ol di三者区别
  • 原文地址:https://www.cnblogs.com/sunp823/p/5601423.html
Copyright © 2011-2022 走看看