Learning to be Giant.

由Compare Version Numbers想到的边界条件问题

|

今天在Leetcode上面做了一道题,题目本身很简单,但是我却提交了五次才通过,原因在于对于边界条件的考虑不周到。联想到之前做这些算法题也经常因为边界条件考虑不周导致反复提交,所以记录一下算是给自己提个醒。

这一次比往常好一点的在于我至少考虑到了如果输入是空的情况,但是针对这一道题还有一些隐藏的边界条件没有考虑,这些问题都是应当在身体之初就搞清楚的。个别问题没有办法在审题的时候就弄清楚,也是应该在写代码的时候注意的。

首先是对于测试用例11.0,在写代码的时候没有考虑到这两个事实上是相同的,同理的还有11.0.0以及1.0.0.0等等,所以我在原代码基础之上加上了删除结尾的0的代码:

while (ver1.back() == 0) ver1.pop_back();

可是这样的话运行”0”和”0.0.0”这个用例就会出现内存越界的问题,原因在于循环没有判断如果这个vector已经是空了之后就不应当继续pop了。所以改成:

while (ver1.back() == 0 && ver1.size() > 0) ver1.pop_back();

另外,在写代码过程当中发现,string的c_str()返回的是const char *,无法直接被strtok()作为参数,所以还需要进行一些字符串复制的操作。

Comments