无规则字符串转化为整数

字符串转化为整数

题目来源:牛客网
实现函数 atoi 。函数的功能为将字符串转化为整数
提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。

思路

题意中表明,字符串中可能包含非数字,比如 “+”、“-”、“a”、等其他符号。所以我们在转化数字的时候需要注意一下几点:

  • 开始部位的符号
  • 中间的符号(取前部分数字,后部分截断)
  • 判断是否会溢出
  • 空格处理

开始部位的符号我们只需要设一个变量 sign 存储一下就可以了;中间部位的符号,只需要判断某一点字符是否在区间 【‘0’~‘9’】之间即可;关于溢出,在转化过程中,判断当前数字与最大值【Integer.MAX_VALUE/10】的大小即可;空格,我们需要在转换前直接去掉前后空格,使用string的trim即可。

import java.util.*;


public class Solution {
    /**
     * 
     * @param str string字符串 
     * @return int整型
     */
    public int atoi (String str) {
        // write code here
        if(str == null || str.trim().length()<1)return 0;
        //string change to char[]
        char[] arr = str.trim().toCharArray();
        
        int flag = 1,index = 0;
        if(arr[0] == '+'){
            index++;
        }else if(arr[0] == '-'){
            flag = -1;
            index++;
        }
        int num = 0;
        for(int i= index; i<arr.length;i++){
            //judge the item whether is a number
            if(arr[i] >= '0' && arr[i] <='9'){
                //溢出
                if(num > Integer.MAX_VALUE/10 || (num==Integer.MAX_VALUE && arr[i]>'7')){
                    if(flag >0){
                        return Integer.MAX_VALUE;
                    }else{
                        return Integer.MIN_VALUE;
                    }
                }
                //arr[i] - '0'是一个整数
                num = num*10 + arr[i] - '0';
            }else{
                break;
            }
        }
        return num*flag;
    }
    
    
}

温故知新,未央书斋

你可能感兴趣的:(后端相关,刷题笔记,字符串,算法,java)