No.008 String to Integer (atoi)

8. String to Integer (atoi)

  • Total Accepted: 112863
  • Total Submissions: 825433
  • Difficulty: Easy

  Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

  思路:

  本题的难度倒不大,主要是考察的细心程度和对和各种可能的情况是否考虑清楚。题主也是通过三四次提交失败之后才accepted。

  主要考虑的情况有以下几种:

  • 空串或str == null
  • 字符串开头有连续的空格
  • 非空格的第一个字符为“+”或“-”或0或其他情况
  • 字符串长度可能非常长,甚至转换过来之后超过long类型的范围
  • 当遇到非正常字符时,输出之前的结果,eg:-123a245,输出结果为-123
  • 对于输出结果超出int类型范围的输出边界值,也就是说输出结果大于int类型最大值,则输出Integer.MAX_VALUE,当输出结果小于int类型最小值时,输出Integer.MIN_VALUE

  暂时只考虑了这么多种吧,代码如下:

 1 public int myAtoi(String str) {
 2     //对null和空串情况进行判断
 3     if(str == null || str.length() == 0){
 4         return 0 ;
 5     }
 6     //截除字符串的前面的空格
 7    char [] arr = str.trim().toCharArray() ;
 8    int temp ;    //乘子,表示正负
 9    int index ;   //表示最高位开始的index
10    //判断非空有效位的首位的情况
11    if((arr[0] == '-') && (arr.length > 1)){
12        temp = -1 ;
13        index = 1 ;
14    }else if((arr[0] <= '9') && (arr[0] >= '0')){
15        temp = 1 ;
16        index = 0 ;
17    }else if((arr[0] == '+') && (arr.length > 1)){
18        temp = 1 ;
19        index = 1 ;
20    }else{
21        return 0 ;
22    }
23    
24    long res = 0 ;
25    for(int i = index ; i < arr.length ; i++){
26        /*判断每一位是否是数字,不是则直接截断已经处理的结果
27         * 考虑到int类型的最长有效位数是10位,加上符号位11位,这里再附加一位保险位,
28         * 超过12位的肯定超出了有效范围我们不继续处理后面的,直接截断*/
29        if((arr[i] <= '9') && (arr[i] >= '0' && i < 13)){ 
30            res = res*10 + temp*(arr[i]-'0') ;
31        }else{
32            break ;
33        }
34    }
35    //判断输出的结果是否超出int类型的范围
36    if(res > Integer.MAX_VALUE ){
37        return Integer.MAX_VALUE ;
38    }else if(res < Integer.MIN_VALUE){
39         return Integer.MIN_VALUE ;
40     }else{
41         return (int)res ;            
42     } 
43 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coco的专栏

Javascript正则构造函数与正则表达字面量&&常用正则表达式

19740
来自专栏猿人谷

C++ STL算法系列1---count函数

一.count函数 algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果...

26560
来自专栏数据结构与算法

codevs 4163 hzwer与逆序对

 时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description hzwer在研究逆序对。 对于数...

32080
来自专栏人工智能LeadAI

查找排序数组的最小值(js)

在由小到大已排序的未知数组中,以某个元素为支点旋转(好比将序列沿着前后顺序围成环移动)得到了一个数组,请找出该数组的最小值。比如倘若原数组(对我们而言,并不知道...

20840
来自专栏数据结构与算法

1191 数轴染色

1191 数轴染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一条数轴...

37590
来自专栏赵俊的Java专栏

LeetCode 557 Reverse Words in a String III

首先按照空格对字符串进行分隔,然后将每个单词进行翻转后再拼接回字符串即可,需要注意拼接时记得加空格,但最后一个单词不需要加。

10310
来自专栏杂七杂八

numpy科学计算包的使用1

Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形...

42750
来自专栏Java 源码分析

排序算法

选择排序: ​ 选择排序一般来说就是,我们 始终从中右边的序列中找出那些最小的元素,放在左侧,这样我们就能保证左边始终有序。 ​ 但是这个算法的复杂...

42160
来自专栏技术沉淀

Python: 函数式编程

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回,比循环更简洁,更易读。

17640
来自专栏算法channel

Numpy|需要信手拈来的功能

这是一篇Numpy中经常使用的API的不完全总结,欢迎补充和指导。 01 类型转化 凡是使用Numpy的小伙伴,无不遇到类型转化这个问题,并且经常需要通过调试...

34430

扫码关注云+社区

领取腾讯云代金券