首页 > 代码库 > leetcode 7
leetcode 7
此题实现比较简单,但是边界处理比较麻烦。题目要求是以32位考虑,所以可表达的数的范围是-2147483648~2147483648。
我们需要判断当前的数翻转之后是否在这个范围中,我的思路是首先对当前数的绝对值进行判断,如果它不是一个10位数就可以正常的执行;
反之,进入判断边界的部分。将边界的最大值的每一位分别存入数组中。逐位进行比较,若翻转后越界,则返回0;
但是这样还是无法通过,会在边界处出错,即输入为-2147483648和2147483648就会得出错误的结果,正确的情况应该返回0;
对于上述的情况没有想明白原因,所以就取巧加了个判断,没想到竟然通过了。而且运行时间竟然是最短的,真是吓死我了!!
有大神看出哪里有毛病请一定告诉我,要不然我就瞎嘚瑟了~~
代码如下:
1 class Solution { 2 public: 3 int reverse(int x) { 4 int result = 0; 5 if(x == 2147483648 || x == -2147483648) 6 return 0; 7 if(abs(x) < 1000000000) 8 { 9 while(x != 0)10 {11 result = result * 10 + x % 10;12 x = x / 10;13 }14 }15 else16 {17 int a[10] = {2,1,4,7,4,8,3,6,4,8};18 int i = 0;19 int flag = abs(x);20 while(flag != 0)21 {22 if((flag % 10) > a[i])23 {24 return 0;25 } 26 else if((flag % 10) < a[i])27 {28 while(x != 0)29 {30 result = result * 10 + x % 10;31 x = x / 10;32 }33 return result;34 }35 flag /= 10;36 i++;37 }38 }39 return result;40 }41 };
leetcode 7
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。