8. 字符串转换整数 (atoi)
迪丽瓦拉
2024-05-30 21:10:44
0

题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0

提示:

-231 <= x <= 231 - 1
通过次数1,160,314提交次数3,276,552

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-integer

题解

import java.util.Scanner;public class Solution8 {public static int myAtoi(String str){int len=str.length();char[] charArray=str.toCharArray();int index=0;//去除签到空格while(indexindex++;}//如果遍历完了,针对比较极端的情况,全是空格的字符串if(index==len){return 0;}//如果出现符号字符,仅第一个有效,并记录正负int sign=1;char firstChar=charArray[index];if(firstChar=='+'){index++;}else if(firstChar=='-'){index++;sign=-1;}//将后续出现的数字字符转换为整数int res=0;while(indexchar currChar=charArray[index];//判断字符是否是合法的数字字符if(currChar<'0'||currChar>'9'){break;}//还要判断题中说到的,只能存储32位大小的有符号整数,需要提前预判,数会不会超范围,乘以10if(res>Integer.MAX_VALUE/10||(res==Integer.MAX_VALUE/10 && (currChar-'0')>Integer.MAX_VALUE%10)){return Integer.MAX_VALUE;}if(res-(Integer.MIN_VALUE%10))){return Integer.MIN_VALUE;}//所有情况都合法的条件下,才考虑转换,把每一步的符号都乘进去res=res*10+(currChar-'0')*sign;index++;}return res;}public static void main(String [] args){Scanner in=new Scanner(System.in);String str=in.nextLine();//记住Java输入字符串的用法int ans=myAtoi(str);System.out.println(ans);}
}

难点

  1. 各个条件的判断
  2. 提前判断会不会超int整数型的范围
  3. sign记号的使用
  4. 从前往后,要乘10;(ans=ans10+sign(currChar-‘0’));

相关内容