字符串转换整数_8_65
LeetCode_8原题链接: https://leetcode-cn.com/problems/valid-number/
LeetCode_65原题链接:https://leetcode-cn.com/problems/valid-number/submissions/
package Leetcode; import java.util.Scanner; /** * @date 2022/4/4-20:21 * 请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 * * 函数myAtoi(string s) 的算法如下: * 1. 读入字符串并丢弃无用的前导空格 * 2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 * 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 * 3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 * 4. 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。 * 如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。 * 5. 如果整数数超过 32 位有符号整数范围 [−2^31, 2^31− 1] ,需要截断这个整数,使其保持在这个范围内。 * 具体来说,小于 −2^31 的整数应该被固定为 −2^31 ,大于 2^31− 1 的整数应该被固定为 2^31− 1 。 * 6. 返回整数作为最终结果。 * */ public class myAtoi { public static int myAtoi(String str) { int len = str.length(); int index = 0; while(index < len) { // 将str的前导空格去掉 if(str.charAt(index) != ' ') { break; } index++; } if(index == len) { return 0; } int sign = 1; char firstChar = str.charAt(index); // 确定str的符号 if (firstChar == '+') { sign = 1; index++; } else if(firstChar == '-') { sign = -1; index++; } int res = 0; while(index <len) { char curChar = str.charAt(index); if(curChar > '9' || curChar < '0') { // 确定str的正确范围 break; } if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (curChar - '0' > Integer.MAX_VALUE % 10))) { return Integer.MAX_VALUE; } if(res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (curChar - '0' > -(Integer.MIN_VALUE % 10)))) { return Integer.MIN_VALUE; } res = res * 10 + sign * (curChar - '0'); index++; } return res; } public static void main(String[] args) { System.out.println("Please input the value of str"); Scanner in = new Scanner(System.in); String str = in.next(); System.out.println("The result after call method is:\n" + myAtoi(str)); } }
LeetCode_65:判断给的字符串是否是有效的数字 有效数字(按顺序)可以分成以下几个部分: 1.一个 小数 或者 整数 2.(可选)一个 'e' 或 'E' ,后面跟着一个 整数 1.小数(按顺序)可以分成以下几个部分: 1.(可选)一个符号字符('+' 或 '-') 2.下述格式之一: 1.至少一位数字,后面跟着一个点 '.' 2.至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字 3.一个点 '.' ,后面跟着至少一位数字 2.整数(按顺序)可以分成以下几个部分: 1.(可选)一个符号字符('+' 或 '-') 2.至少一位数字 public boolean isNumber(String s) { if(s == null || s.length() == 0) { return false; } boolean numSeen = false; boolean dotSeen = false; boolean eSeen = false; char[] arr = s.trim().toCharArray(); for(int i = 0; i < arr.length; i ++) { if(arr[i] >= '0' && arr[i] <= '9') { numSeen = true; } else if(arr[i] == '.') { if(dotSeen || eSeen) { return false; } dotSeen = true; } else if(arr[i] == 'E' || arr[i] == 'e') { if(eSeen || !numSeen) { return false; } eSeen = true; numSeen = false; } else if(arr[i] == '+' || arr[i] == '-') { if(i != 0 && arr[i - 1] != 'e' && arr[i - 1] != 'E'){ return false; } } else { return false; } } return numSeen; }

浙公网安备 33010602011771号