165. 比较版本号

比较版本号

比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。

你可以假设版本字符串非空,并且只包含数字和 . 字符。

. 字符不代表小数点,而是用于分隔数字序列。

例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。

你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 0。

示例 1:

输入: version1 = "0.1", version2 = "1.1"
输出: -1

思路+代码+注释:

public int compareVersion(String version1, String version2) {
        /*
        思路:首先将两个字符串按照.进行切割,短的字符串数组后面使用0进行和多的字符串数据元素进行比较这样就解决了末尾默认0的问题;
        对于000010这种子字符串进行遍历找到第一个非0数字然后将从该数字开始的剩余数字添加到一个新str中作为新数字进行比较,这样就解决了000010这种
        情况,进行数字比较
         */
        String[] versionOneStrs=version1.split("\\.");
        String[] versionTwoStrs=version2.split("\\.");
        int maxLen=0;
        if (versionOneStrs.length>=versionTwoStrs.length)
        {
            maxLen=versionOneStrs.length;
        }else {
            maxLen=versionTwoStrs.length;
        }
            for (int i = 0; i < maxLen; i++) {
                String versionTwo="0";
                String versionOne="0";
                if (i<versionOneStrs.length)
                {
                    versionOne=versionOneStrs[i];
                }
                if (i<versionTwoStrs.length)
                {
                    versionTwo=versionTwoStrs[i];
                }
                if (!versionTwo.equals("0") && versionTwo.startsWith("0"))
                {
                    StringBuilder sb=new StringBuilder();
                    for (int j = 0; j < versionTwo.length(); j++) {
                        //0000010结果应该是10
                        if (versionTwo.charAt(j)!='0')
                        {
                            for (int k = j; k < versionTwo.length(); k++) {
                                sb.append(versionTwo.charAt(k));
                            }
                            break;
                        }
                    }
                    //可能是000000这样的字符串,那么结果就为空串""
                    versionTwo=sb.toString();
                    if (versionTwo.equals(""))
                    {
                        versionTwo="0";
                    }
                }
                if (!versionOne.equals("0") && versionOne.startsWith("0"))
                {
                    StringBuilder sb=new StringBuilder();
                    for (int j = 0; j < versionOne.length(); j++) {
                        if (versionOne.charAt(j)!='0')
                        {
                            for (int k = j; k < versionOne.length(); k++) {
                                sb.append(versionOne.charAt(k));
                            }
                            break;
                        }
                    }
                    versionOne=sb.toString();
                    if (versionOne.equals(""))
                    {
                        versionOne="0";
                    }
                }
                int versionO=Integer.parseInt(versionOne);
                int versionT=Integer.parseInt(versionTwo);
                if (versionO>versionT)
                {
                    return 1;
                }
                if (versionO<versionT)
                {
                    return -1;
                }
            }
            return 0;
        }

猜你喜欢

转载自blog.csdn.net/qq_36059306/article/details/88708925
今日推荐