剑指Offer_编程题——将字符串转换成整数
题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入:
+2147483647
1a33
输出:
2147483647
0
具体要求:
时间限制: C/C++ 1秒,其他语言2秒
空间限制: C/C++32M,其他语言64M
具体实现
思路一:
1、将输入的字符串转换成字符数组。从大下标开始,反向对每个字符逐个处理。
2、若当前字符的ASII码在[48-57],注意是闭区间。则代表当前字符是[0~9],继续判断下一个。
3、当遍历到下标为0的字符时,需要进行特殊情况的几个判断。包括是否越界,是否是临界值,是否为负号等。
接下来我们用Java实现其思路:
public
代码效果图如图所示
思路二:
1、 先判断首字符是否为负号。
2、 判断当前字符是否表示数字。
3、 (res << 1) + (res << 3) 即 res2+res8=res*10
4、[0-9]的二进制表示低四位刚好就是[0~9]。 (chs[i] & 0xf)即取低四位值。
接下来我们用java和python实现。
1、首先我们用java实现:
public
代码效果图如图所示:
2、接下来我们用python实现:
class
代码效果图如图所示:
总结
本题是主要考察字符串转化为整数,本题较为简单,不过需要我们注意的是int整型数据类型的范围,也就是在java中要考虑其溢出的情况。但是由于python中没有int这一类型,因此不存在溢出的情况,只需要考虑数字以及±*/这些运算符号的ASCII码。本道题我们应用了两种方法将其实现,首先就是将其存在数组里面,然后从右往左进行遍历,转换。另一种就是先判断负号,在进行判断是否为数字,并且通过java以及python两种方式将其实现。因此,我们在做题的时候,应该多次尝试各种方法,扩展自己的思维,写出优质的代码。总之,我们要继续加油,争取早日找到工作,Good Luck!!!
参考文献
[1]ouyangyanlan
[2]天举的博客