LeetCode题目 整数反转 刷题心得。

原题链接:

https://leetcode-cn.com/problems/reverse-integer/

写在前面

现在是研一在读,刚刚开学不久,本科跟硕士的专业都是EE相关,并不是CS,但是现在整个实验室要毕业的学长学姐们好像找的都是CS相关的工作。不打没准备的仗,所以为了以后就业的方便就学一下java相关的内容,顺便再LeetCode上刷刷题。因为刚学习没多久,所以很多代码可能会看起来比较幼稚,还是请各位看官多多包涵,顺便把在调试过程中出现的问题做一个总结,方便日后做一个汇总。

题目内容

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例

输入: 123
输出: 321

输入: -123
输出: -321

输入: 120
输出: 21

需要注意的是:
题目要求只能存储 32 位的有符号整数,也就是int型的数字。值得一提的是int型的范围为:[-2147483648,2147483647],这种情况下就要考虑反转之前或者是反转之后会出现溢出现象。

在最开始看到题目的时候,其实并没有考虑特别多,尤其是没有考虑溢出的问题,但是在写完第一遍的时候,出现了不少的问题。

先在下边简单描述一下自己的思路。

  1. 判断输入是否超出范围。(但是后来在eclipse调试的时候发现,如果在代码中直接输入超出int范围的数字是,编译器会报错。)如果超出范围直接返回“0”。如果要转换的数字是“0”的话也直接返回“0”。
  2. 如果没有超出范围并且也不是“0”的话,开始进行下边的步骤
  3. 进行反转的话,考虑的就是最低位的数字×10(位数-1)+次低位×10(位数-2)+···········
  4. 这里我考虑的问题是有两个,1.如何判断给定的数字一共有多少位;2.如何取得每一位的数字。判断位数由下列代码实现:while(a!=0){' a=a/10; count++; },要取得每一位数字的话,可以考虑引进一个长度为count的数组,将每一位的数据存储到当中。for(int i=0;i<count;i++){ nums[i]=(int)(d/(Math.pow(10, b))); d=(int)(d-nums[i]*Math.pow(10, b)); b=b-1;
    在这里出现了一个小的插曲,因为并不很清楚java中算数乘方的表示方法,最开始还以为是(底数)^(指数),这种形式,后来在编译过程中才发现该符号是相与,在java中有一个专门的函数:Math.pow来完成这项操作。
    5.好的,之后呢再要进行的就是从原来数字的个位数到最高位的转换,这里采用一个循环结构,一次从数组中取数然后与10的乘方相乘再相加。**但是呢这里出现了一个问题,就是可能反转前的数字是在范围之内,但是反转之后的数字会出现溢出,例如:2147483649,反转之后为9463847412,已经超出了int的范围,在java的运算当中,会报错。**这里采用了下边这段代码来解决这个问题,这个方法也是在看LeetCode的笔记中发现的。if(c>Integer.MAX_VALUE/10||(c==Integer.MAX_VALUE/10 &&nums[0]>7)) return 0; else if(c< Integer.MIN_VALUE/10 || (c== Integer.MIN_VALUE / 10 && nums[0]< -8)) return 0; else
    解决这两个问题后,整个题目就没有大的问题了,下面贴出了完整的代码,供各位看官做参考。if(c>Integer.MAX_VALUE/10||(c==Integer.MAX_VALUE/10 &&nums[0]>7)) return 0; else if(c< Integer.MIN_VALUE/10 || (c== Integer.MIN_VALUE / 10 && nums[0]< -8)) return 0; else

写在后面

在看其他的人的代码时,发现有使用long类型数字,来进行判断的,但是题目中有明确要求只能存储int类型,要注意题目的要求啊……

其实作为一个初学者,遇到各种各样的问题还是挺正常的,希望以后自己可以通过这种方式记录下自己的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值