问题描述:

实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。

样例

"10" =>10

"-1" => -1

"123123123123123" => 2147483647

"1.0" => 1

问题分析:

这道题特别恶心,虽然思路很简单,但是它却表述不清。经过若干次失败的尝试,终于明白了它的含义。大概有以下几种注意情况:

(一).""的话返回0。

(二).字符串两边有空格自动屏蔽,有小数点小数点后面的内容舍弃。

(三)."+123"和"123"效果一样。

(四)."a...","-h..."这种,除了符号位只要非数字打头,返回0。

(五)."123gdah3423","-123ff777"这种返回123,-123。

(六).超了范围之后,判断正负性。

问题求解:

public class Solution {
/**
* @param str: A string
* @return An integer
*/
public int atoi(String str) {
// 去除小数位和两边的空格,存在str1中
String str1 = null;
// 后面数字和非数字混合的情况,用于截取前面的数字
StringBuilder sb = new StringBuilder();
if (str.contains(".")) {
str1 = str.substring(0, str.indexOf(".")).trim();
} else {
str1 = str.trim();
}
try {
if ("".equals(str1)) {
return 0;
}
return Integer.parseInt(str1);
} catch (NumberFormatException e) {
/*
* 先进行判断,字符串前面是否有"+"和"-",分三种情况
*/
//1.前面既没有"+"也没有"-"
if (str1.charAt(0) != '-' && str1.charAt(0) != '+') {
processData(0, str1, sb);
if (sb.length() == 0) {// 第一个是非数字
return 0;
} else if (sb.length() < str1.length()) {// 数字中夹杂非数字
return atoi(sb.toString());
} else {// 全是数字
return Integer.MAX_VALUE;
}
//2.前面是"+"
} else if (str1.charAt(0) == '+') {
processData(1, str1, sb);
if (sb.length() == 0) {// 第一个是非数字
return 0;
} else if (sb.length() < str1.length() - 1) {// 数字中夹杂非数字
return atoi(sb.toString());
} else {// 全是数字
return Integer.MAX_VALUE;
}
//3.前面是"-"
} else {
sb.append('-');
processData(1, str1, sb);
if (sb.length() == 1) {// 第一个是非数字
return 0;
} else if (sb.length() < str1.length()) {// 数字中夹杂非数字
return atoi(sb.toString());
} else {// 全是数字
return Integer.MIN_VALUE;
}
}
}
} public void processData(int start, String str1, StringBuilder sb) {
for (int i = start; i < str1.length(); i++) {
if (str1.charAt(i) < '0' || str1.charAt(i) > '9') {
break;
}
sb.append(str1.charAt(i));
}
} }

[LintCode]转换字符串到整数的更多相关文章

  1. LintCode-54.转换字符串到整数

    转换字符串到整数 实现atoi这个函数,将一个字符串转换为整数.如果没有合法的整数,返回0.如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN( ...

  2. 【LintCode】转换字符串到整数

    问题描述: 实现atoi这个函数,将一个字符串转换为整数.如果没有合法的整数,返回0.如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-21 ...

  3. Java中将0x开头的十六进制字符串转换成十进制整数

    1.Integer.toString(int i) 由于input(输入数据)是以0x开头的字符串,并不是整型.因而在用 String s = Integer.toString(input); 时用会 ...

  4. 编程练习------C/C++分别实现字符串与整数的转换

    C/C++分别实现字符串与整数的转换 前提:不使用 itoa 和 atoi. 方法一.C和C++通用的一种转换手段是: 1.整数转化为字符串:采用加'0',再逆序的办法,整数加'0'就会隐性转化成ch ...

  5. [PHP] 算法-将一个字符串转换成一个整数的PHP实现

    题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...

  6. python 字符串和整数,浮点型互相转换

    在编程当中,经常要用到字符串的互相转换, 现在记录 python 里面的字符串和整数是怎么转换的. int(str) 函数将 符合整数的规范的字符串 转换成 int 型. num2 = "1 ...

  7. Leetcode8--->String to Integer(实现字符串到整数的转换)

    题目: 实现字符串到整数的转换 解题思路: 下面给出这道题应该注意的一些细节: 1. 字符串“    123   ” = 123: 2.   字符串“+123” = 123: 3.   字符串“-12 ...

  8. SQL Server日期时间格式转换字符串详解 (详询请加qq:2085920154)

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  9. SQL Server日期时间格式转换字符串

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

随机推荐

  1. Python的 numpy中 numpy.ravel() 和numpy.flatten()的区别和使用

    两者所要实现的功能是一致的(将多维数组降为一维), 两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten() 返回一份拷贝,对拷贝所做的修改不会影响(reflects ...

  2. Linux命令-工作管理命令:&,ctrl+z,jobs,fg,bg

    在linux下面将一个进程放入后台执行,有两种方式: 第一种方式:&表示命令在后台执行程序,等同于windows里面的程序最小化. 第二种方式:执行某一个命令,例如:top,然后按ctrl+z ...

  3. C1控件的破解步骤

    最近接触了一个系统中的打印和报表控件用到了C1控件,控件在以前就注册了的,可是在这次修改了系统后,系统却提示C1的控件没有注册. 怎么回事呢?我们这次并没有修改报表,而且也没有和C1控件相关的改动.怎 ...

  4. 敏捷转型中why与how的总结

    敏捷转型參考框架: 为了成功顺畅地推行敏捷开发.下面将对整个敏捷转型參考框架作个整体说明.为企业进行敏捷转型提供基本方法參考.整个敏捷转型參考框架主要包括5个步骤,前两个步骤主要是回答 Wh y的问题 ...

  5. NAS、SAN和DAS的区别

    目前磁盘存储市场上,存储分类(如下表一)根据服务器类型分为:封闭系统的存储和开放系统的存储,封闭系统主要指大型机,AS400等服务器,开放系统指基于包括Windows.UNIX.Linux等操作系统的 ...

  6. Android Gradle 引用本地 AAR 的几种方式

    折衷方案: 1.方式2 - 不完美解决办法2 2.再使用"自定义Gradle代码"来减轻重复设置的问题. 自定义Gradle代码如下: repositories { flatDir ...

  7. tomcat在conf/Catalina/localhost目录下配置项目路径

    转自:http://wangyl93-dl-cn.iteye.com/blog/1508517 在tomcat的conf/Catalina/localhost目录下配置项目路径,tomcat启动是会直 ...

  8. BestCoder Round #4 Miaomiao&#39;s Geometry (暴力)

    Problem Description There are N point on X-axis . Miaomiao would like to cover them ALL by using seg ...

  9. 向Oracle数据库插入一条数据

    这几天搞了一下Oracle数据库.可能用sql server习惯了,感觉好不方便.PL的界面友好度比sql server差远了 .既然都收购了PL了 为什么不给它做好一点呢?各种不便.郁闷 向Orac ...

  10. android.content.res.TypedArray-深入理解android自定义属性(AttributeSet,TypedArray)

    属性 自定义属性,首先要定义出来属性,我们新建一个attrs.xml: <?xml version="1.0" encoding="utf-8"?> ...