查看: 3335| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

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

🔗
viper | 只看该作者 |倒序浏览
全局:

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

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!






上一篇:求Java BST 插入一个新节点的方法
下一篇:我觉得算法理论分析那些我比较精通,但具体编程实现就差一些,求solution
🔗
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大米 +3 收起 理由
miss_snow + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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