标签:reverse 符号 int 反转 整数 str 32 leetcode
一、题目:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
二、解题思路:
- 题意理解: 给定一个32 位的有符号整数 x,将数字倒排,如果倒排后是值不在32有符号整数范围内就返回0。
- 解题思路: 将该整数转为字符串,先排除符号,利用StringBuilder根据索引将字符倒过拼接,拼接后处理无效0的字符,之后转为int类型,用try,catch抓取异常如果有异常说明反转后的数不在32有符号整数范围内返回0即可代码如下:
class Solution { public int reverse(int x) { boolean falg = false;//符号标识为负数时 flag = true String str = String.valueOf(x); if (str.startsWith("-")){ // 去除符号 str = str.substring(1); falg = true; } StringBuilder reverse = new StringBuilder(); int length = str.length(); for (int i = length -1; i >= 0; i--) { //倒过来拼接字符 reverse.append(str.charAt(i)); } str = String.valueOf(reverse); for (int i = 0; i < str.length() - 1 ; i++) { // 去除反转后无效的数字0 if (!"0".equals(String.valueOf(str.charAt(i)))){ str = str.substring(i); break; } } if (falg){ str = "-" + str; } try { x = Integer.parseInt(str);//有异常说明反转后的数值不在 [−231, 231 − 1] 范围内返回 0 } catch (NumberFormatException e) { return 0; } return x; } }
大佬解法:
class Solution { public int reverse(int x) { int res = 0; while(x!=0) { //每次取末尾数字 int tmp = x%10; //判断是否 大于 最大32位整数 if (res>214748364 || (res==214748364 && tmp>7)) { return 0; } //判断是否 小于 最小32位整数 if (res<-214748364 || (res==-214748364 && tmp<-8)) { return 0; } res = res*10 + tmp; x /= 10; } return res; } }
标签:reverse,符号,int,反转,整数,str,32,leetcode 来源: https://blog.csdn.net/FatIsNotPanda/article/details/120250937
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。