zoukankan      html  css  js  c++  java
  • #Leetcode# 165. Compare Version Numbers

    https://leetcode.com/problems/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.

    Example 1:

    Input: version1 = "0.1", version2 = "1.1"
    Output: -1

    Example 2:

    Input: version1 = "1.0.1", version2 = "1"
    Output: 1

    Example 3:

    Input: version1 = "7.5.2.4", version2 = "7.5.3"
    Output: -1

    代码:

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            int len1 = version1.size(), len2 = version2.size();
            int num1[100100], num2[100100];
            int cnt1 = 0, cnt2 = 0;
            memset(num1, 0, sizeof(num1));
            memset(num2, 0, sizeof(num2));
            version1[len1] = '.'; len1 ++; version1[len1] = '';
            version2[len2] = '.'; len2 ++; version2[len2] = '';
            for(int i = 0; i < len1; i ++) {
                if(version1[i] != '.')
                for(int j = i; j < len1; j ++) {
                    if(version1[j] != '.') continue;
                    else {
                        cnt1 ++;
                        for(int k = i; k < j; k ++)
                            num1[cnt1] = num1[cnt1] * 10 + (version1[k] - '0');
    
                        i = j;
                        break;
                    }
                }
            }
            for(int i = 0; i < len2; i ++) {
                if(version2[i] != '.')
                for(int j = i; j < len2; j ++) {
                    if(version2[j] != '.') continue;
                    else {
                        cnt2 ++;
                        for(int k = i; k < j; k ++)
                            num2[cnt2] = num2[cnt2] * 10 + (version2[k] - '0');
    
                        i = j;
                        break;
                    }
                }
            }
            int flag = 0;
            int minn = min(cnt1, cnt2);
            for(int i = 1; i <= minn; i ++) {
                if(num1[i] == num2[i]) continue;
                else if(num1[i] > num2[i]) return 1;
                else return -1;
            }
            
            
                if(cnt1 == cnt2) return 0;
                else if(cnt1 > cnt2) {
                    for(int i = minn + 1; i <= cnt1; i ++) {
                        if(num1[i]) return 1;
                    }
                } else {
                    for(int i = minn + 1; i <= cnt2; i ++) {
                        if(num2[i]) return -1;
                    }
                }
                return 0;
        }
    };
    View Code

    第一次写的时候没想太多但是发现有前导零以及 $1.0$ 和 $1$ 这样的情况 所以以小数点为界限把里面的数字都挖出来然后进行比较 但是我这个写完就比较慢 

  • 相关阅读:
    20145220&20145209&20145309信息安全系统设计基础实验报告
    20145209 《信息安全系统设计基础》第8周学习总结
    R574
    gym102219
    102222F
    luogu 1337
    luogu 2503 & bzoj 2428
    18 BJ J
    poj 1981
    101992 I
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/10036952.html
Copyright © 2011-2022 走看看