LeetCode165 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.

You may assume the default revision number for each level of a version number to be 0. For example, version number 3.4 has a revision number of 3 and 4 for its first and second level revision number. Its third and fourth level revision number are both 0.

 

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

Example 4:

Input: version1 = "1.01", version2 = "1.001"
Output: 0
Explanation: Ignoring leading zeroes, both “01” and “001" represent the same number “1”

Example 5:

Input: version1 = "1.0", version2 = "1.0.0"
Output: 0
Explanation: The first version number does not have a third level revision number, which means its third level revision number is default to "0"

 

Note:

  1. Version strings are composed of numeric strings separated by dots . and this numeric strings may have leading zeroes.
  2. Version strings do not start or end with dots, and they will not be two consecutive dots.

题源:here;完整实现:here

思路:

两种方法:1 将字符串转换为一个一个的vector然后比较vector;2 在比较字符串的过程中逐渐生成整数。注意方法1假设了我们的版本号只有4节的情况下。

方法1

	int compareVersion(string version1, string version2) {
		vector<int> v1, v2;
		v1 = convert(version1);
		v2 = convert(version2);
		for (decltype(v1.size()) i = 0; i < v1.size() && i<v2.size(); i++) {
			if (v1[i] > v2[i]) return 1;
			else if (v1[i] < v2[i]) return -1;
			else continue;
		}
		return 0;
	}

	vector<int> convert(string str) {
		string tmp;
		vector<int> res;
		for (auto i : str) {
			if (i == '.') {
				int i = atoi(tmp.c_str());
				res.push_back(i);
				tmp = "";
			}
			else {
				tmp += i;
			}
		}
		res.push_back(atoi(tmp.c_str()));
		while (res.size() < 4) res.push_back(0);
		return res;
	}

方法2

	int compareVersion2(string version1, string version2) {
		decltype(version1.size()) i, j, m, n;
		i = 0, j = 0, m = version1.size(), n = version2.size();
		while (i < m || j < n) {
			int num1 = 0, num2 = 0;
			while (i < m && version1[i] != '.') {
				num1 += num1 * 10 + (version1[i] - '0');
				i++;
			}
			while (j < n && version2[j] != '.') {
				num2 = num2 * 10 + (version2[j] - '0');
				j++;
			}
			i++, j++;
			if (num1 > num2) return 1;
			if (num1 < num2) return -1;
		}
		return 0;
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值