首页
学习
活动
专区
圈层
工具
发布

每天一道剑指offer-把字符串转换成整数

考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默响起来一个声音:”乔戈里峰

题目

每天一道剑指offer-把字符串转换成整数 https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&tqId=11202&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目详述

将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入

代码语言:javascript
复制
+2147483647
    1a33

输出

代码语言:javascript
复制
2147483647
    0

题目详解

思路

  • 只有第一个位置上的字符可以是+或-或数字,其他位置上的字符必须是数字
  • 如果第一个字符是-,返回结果必须是负数
  • 如果字符串只有一个字符,且为+或-,这情况很容易被忽略
  • 在对字符串解析转换时,如果发现溢出(包括正数向负数溢出,负数向正数溢出),必须有所处理(此时可以和面试官交涉),但不能视而不见。

代码

代码语言:javascript
复制
public class Solution {
    public int StrToInt(String str) {
        if(str == null || str == "" || str.equals("+") || str.equals("-"))
            return 0;
        int flag = 0;
        long sum = 0;
        char [] strArray = str.toCharArray();
        for(int i=0;i<strArray.length;i++)
        {
            if(strArray[0] == '-' && i == 0)
            {//是负数记录下来
                flag = 1;
                continue;
            }
            if(strArray[0] == '+' && i == 0)
            {//是整数
                continue;
            }
            if(!judge(strArray[i]))//判断是不是正常的数
                return 0;
            sum = sum * 10 + strArray[i] - '0';
        }
        if(flag == 1)
        {
            sum = sum * (-1);
            if(sum < Integer.MIN_VALUE)
                return 0;//判断越界没
            return (int)sum;
        }
        if(sum > Integer.MAX_VALUE)
            return 0;//判断越界没
        return (int)sum;
    }
    private boolean judge(char ch)
    {//利用ASC码,不在这个范围内的ASC码直接返回false,说明不是正常的数
        int number = ch - '0';
        if(number >= 0 && number <= 9)
        {
            return true;
        }
        return false;
    }
}

下一篇
举报
领券