一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1758|回复: 6
收起左侧

[Leetcode] leetcode新题Compare Version Numbers OJ和本地运行不一致

[复制链接] |试试Instant~ |关注本帖
viper 发表于 2014-12-31 00:00:43 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x

Compare two version numbers version1 and version1.
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. class Solution {
  2. public:
  3.     vector<int> split(string str) {
  4.         vector<int> ret;
  5.         char* cstr = new char[str.length() + 1];
  6.         strcpy(cstr, str.c_str());
  7.         
  8.         char* pch = strtok(cstr, ".");
  9.         while (pch != NULL) {
  10.             ret.push_back(atoi(pch));
  11.             pch = strtok(NULL, ".");
  12.         }
  13.         
  14.         delete[] cstr;
  15.         return ret;
  16.     }
  17.    
  18.     int compareVersion(string version1, string version2) {
  19.         vector<int> nums1 = split(version1);
  20.         vector<int> nums2 = split(version2);
  21.         int len = max(nums1.size(), nums2.size());
  22.         
  23.         for (int i = 0; i < len; ++i) {
  24.             int num1 = i < len ? nums1[i] : 0;
  25.             int num2 = i < len ? nums2[i] : 0;
  26.             
  27.             if (num1 > num2) {
  28.                 return 1;
  29.             } else if (num1 < num2) {
  30.                 return -1;
  31.             }
  32.         }
  33.         
  34.         return 0;
  35.     }
  36. };
复制代码
OJ测试failed,但我本地运行该testcase能够通过:
Input: "1.0", "1"
Output: 1
Expected: 0

求问原因,thx!





Hotzenplotz 发表于 2014-12-31 13:03:05 | 显示全部楼层
我只会java,所以没看你的split()是否有问题。你下面判断的循环应该是有问题的。
  
      int len = max(nums1.size(), nums2.size());
        
        for (int i = 0; i < len; ++i) {
            int num1 = i < len ? nums1[i] : 0;
            int num2 = i < len ? nums2[i] : 0;
这里for循环条件是i < len,所以会下面赋值的判断里,总会满足i < len
回复 支持 反对

使用道具 举报

dydcfg 发表于 2014-12-31 14:49:28 | 显示全部楼层
问题出在Line24,25
24: i < len 应该是 i < num1.size()
25也一样
回复 支持 反对

使用道具 举报

 楼主| viper 发表于 2014-12-31 23:35:11 | 显示全部楼层
dydcfg 发表于 2014-12-31 14:49
问题出在Line24,25
24: i < len 应该是 i < num1.size()
25也一样

感谢!问题已解决。
回复 支持 反对

使用道具 举报

 楼主| viper 发表于 2014-12-31 23:35:19 | 显示全部楼层
Hotzenplotz 发表于 2014-12-31 13:03
我只会java,所以没看你的split()是否有问题。你下面判断的循环应该是有问题的。
  
      int len = max ...

感谢!问题已解决。
回复 支持 反对

使用道具 举报

miss_snow 发表于 2015-1-1 16:54:17 | 显示全部楼层
lz问一下题目什么意思?
回复 支持 反对

使用道具 举报

 楼主| viper 发表于 2015-1-3 13:27:36 | 显示全部楼层
miss_snow 发表于 2015-1-1 16:54
lz问一下题目什么意思?

比较版本号大小
比如:
1.1 > 1
1.0.1 > 1.0
1.10 > 1.1
2.5 < 3

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-11 12:35

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表