网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月28日漏签0天
算法吧 关注:30,758贴子:59,789
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 7回复贴,共1页
<<返回算法吧
>0< 加载中...

java算法学习笔记

  • 只看楼主
  • 收藏

  • 回复
  • 混世魔王susu
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有需要的可以看一下


  • 混世魔王susu
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21


2025-05-28 15:10:59
广告
  • 混世魔王susu
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31-1]。请根据这个假设,如果反转后整数溢出那么就返回 0。


  • 混世魔王susu
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
解题思路:
题目要求,输入负数,也要输出一个符号相同数字相反的整数,输入一个结尾带0的整数输出却不带0,由此可以想到,我们构建一个整型范围内的数字ans,去存目标的符号相同数字相反的整数。
关键代码如下:
int temp = x % 10;
x /= 10;
ans = ans * 10 + temp;


  • 混世魔王susu
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为翻转数字有这么一个问题,翻转后的数字容易溢出,所以我们还要对ans进行判断,那么如何去判断呢,有两个办法。
1:在整型变量ans溢出之前判断;
我们知道int 整型范围为(-2,147,483,648,2,147,483,647),在java中可以用Integer类中MAX_VALUE和MIN_VALUE代替;
因为 ans = ans*10+temp,
如果刚好溢出了,就一定有ans*10+temp>Integer.MAX_VALUE,
两边同时除以10,就剩下ans>Integer.MAX_VALUE/10;
temp/10<1,在整型中变为了0;
如果ans==Integer.MAX_VALUE呢,temp就一定要小于7了,
就相当于2,147,483,640+temp;负数也一样,照理推理就好。


  • 混世魔王susu
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
所以判断代码如下:
if (ans > Integer.MAX_VALUE/10 || (ans == Integer.MAX_VALUE / 10 && temp > 7)) return 0;
if (ans < Integer.MIN_VALUE/10 || (ans == Integer.MIN_VALUE / 10 && temp < -8)) return 0;


  • 混世魔王susu
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2:在溢出后再判断;
这个方法就简单许多了,我们只要将ans定义为long类型再判断是否大于Integer.MAX_VALUE就行,记得最后要强制类型转换,因为题目要求返回一个int类型的。


  • 混世魔王susu
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
public int reverse(int x) {
int ans = 0;
while (x != 0) {
int temp = x % 10;
x /= 10;
if (ans > Integer.MAX_VALUE/10 || (ans == Integer.MAX_VALUE / 10 && temp > 7)) return 0;
if (ans < Integer.MIN_VALUE/10 || (ans == Integer.MIN_VALUE / 10 && temp < -8)) return 0;
ans = ans * 10 + temp;
}
return ans;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回算法吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示