【LeetCode】165. 比较版本号 结题报告 (C++)

原题地址:https://leetcode-cn.com/problems/compare-version-numbers/description/

题目描述:

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

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

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

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

示例 1:

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

输入: version1 = "1.0.1", version2 = "1"
输出: 1
示例 3:

输入: version1 = "7.5.2.4", version2 = "7.5.3"
输出: -1

解题方案:

开始的思路是,一个一个进行字符的比较。后来发现,这种方式需要考的情况太多了,领扣给出的样例有很奇怪的数据,比较的麻烦。在一个问题上困扰太多,要及时进行调整,不要过于固执,需转变思维,化繁为简。。。

之后,选择将字符串转化为整数再进行比较。

代码:

class Solution {
public:
    int compareVersion(string version1, string version2) {
        int val1, val2;
        int idx1 = 0, idx2 = 0;
        while (idx1 < version1.length() || idx2 < version2.length()) {
            val1 = 0;
            while (idx1 < version1.length()) {
                if (version1[idx1] == '.') {
                    ++idx1;
                    break;
                }
                val1 = val1 * 10 + (version1[idx1] - '0');
                idx1 ++;
            }
            
            val2 = 0;
            while (idx2 < version2.length()) {
                if (version2[idx2] == '.') {
                    idx2 ++;
                    break;
                }
                val2 = val2 * 10 + (version2[idx2] - '0');
                idx2 ++;
            }
            if (val1 > val2) return 1;
            if (val1 < val2) return -1;
        }
        return 0;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_32805671/article/details/83095838