zoukankan      html  css  js  c++  java
  • 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         else
    16         {
    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 };
  • 相关阅读:
    解决maven无法下载jar的问题
    Vue-Router 基础
    VUE自定义组件
    VUE过滤器
    VUE生命周期函数
    VUE表单输入绑定
    VUE计算属性和监听器
    VUE 模板语法
    VUE介绍
    taro3.x: 函数组件createIntersectionObserver
  • 原文地址:https://www.cnblogs.com/shellfishsplace/p/5827987.html
Copyright © 2011-2022 走看看