题目描述:

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.

解题思路:

这道题简直让人抓狂!试了许多次都没有通过,原因是要考虑多种情况。主要考虑的因数有:

  1. 要考虑前几个或全部字符都是空白字符的情况;
  2. 要考虑第一个字符是+,-,还是0-9的字母,或是其他字符;
  3. 要考虑有没有值得溢出,尤其是最小值溢出;
  4. 若中间有非数字字符,要返回之前的数字,如“123a34”要返回123;
  5. 若以若干个0开始,则0要忽略,如“-0000234”要返回-234

找出这几种情况之后,就代码就不难写了。总之这道题AC率很低的原因并不是逻辑有多难,而是很难考虑到全部的情况。

具体代码:

public class Solution {
public static int myAtoi(String str) {
//取出两边空白字符
str=str.trim();
if(str==null||str.length()==0)
return 0;
if(str.length()==1){
if(str.charAt(0)>='0' && str.charAt(0)<='9')
return Integer.valueOf(str);
else
return 0;
}
//第一个字符是'+
if(str.charAt(0)=='+'){
String s = str.substring(1);
if(isValid(s)){
s=fun(s);
if(s==null)
return 0;
MyCompatator m = new MyCompatator();
if(m.compare(s, ""+Integer.MAX_VALUE)>=0){
return Integer.MAX_VALUE;
}
else{
return Integer.valueOf(s);
}
}
else{
s=fun1(s);
if(s==null)
return 0;
s=fun(s);
if(s==null)
return 0;
MyCompatator m = new MyCompatator();
if(m.compare(s, ""+Integer.MAX_VALUE)>=0){
return Integer.MAX_VALUE;
}
else{
return Integer.valueOf(s);
}
}
}
//第一个字符是'-
else if(str.charAt(0)=='-'){
String s = str.substring(1);
if(isValid(s)){
s=fun(s);
if(s==null)
return 0;
MyCompatator m = new MyCompatator();
StringBuilder sb =new StringBuilder(""+Integer.MIN_VALUE);
sb.deleteCharAt(0);
String ss=sb.toString();
if(m.compare(s, ss)>=0)
return Integer.MIN_VALUE;
else{
return Integer.valueOf(str);
}
}
else{
s=fun1(s);
if(s==null)
return 0;
s=fun(s);
if(s==null)
return 0;
MyCompatator m = new MyCompatator();
StringBuilder sb =new StringBuilder(""+Integer.MIN_VALUE);
sb.deleteCharAt(0);
String ss=sb.toString();
if(m.compare(s, ss)>=0)
return Integer.MIN_VALUE;
else{
return Integer.valueOf("-"+s);
}
}
}
//第一个字符是数字
else if(str.charAt(0)>='0' && str.charAt(0)<='9'){
if(isValid(str)){
str=fun(str);
if(str==null)
return 0;
MyCompatator m = new MyCompatator();
if(m.compare(str, ""+Integer.MAX_VALUE)>=0){
return Integer.MAX_VALUE;
}
else{
return Integer.valueOf(str);
}
}
else{
str=fun1(str);
if(str==null)
return 0;
str=fun(str);
if(str==null)
return 0;
MyCompatator m = new MyCompatator();
if(m.compare(str, ""+Integer.MAX_VALUE)>=0){
return Integer.MAX_VALUE;
}
else{
return Integer.valueOf(str);
}
}
}
//第一个字符是其他数字则出错
else{
return 0;
} }
//判断字符串是否是由数字组成的
public static boolean isValid(String s){
//return s.matches("[1-9][0-9]*");
return s.matches("[0-9]+");
}
//将数字串开始的0全部去掉
public static String fun(String s){
int index=0;
boolean key=false;
for(index=0;index<s.length();index++){
if(s.charAt(index)!='0'){
key=true;
break;
}
}
if(key){
return s.substring(index);
}
else{
return null;
}
}
//截取第一个不是数字字符之前的数字
public static String fun1(String s){
int index=0;
for(index=0;s.charAt(index)>='0'&&s.charAt(index)<='9';index++){ }
if(index==0)
return null;
return s.substring(0,index);
}
}
class MyCompatator implements Comparator<String>{ @Override
public int compare(String s1, String s2) {
if(s1.length()>s2.length()){
return 1;
}
else if(s1.length()<s2.length()){
return -1;
}
else{ for(int i=0;i<s1.length();i++){
if(s1.charAt(i) - s2.charAt(i) >0)
return 1;
else if(s1.charAt(i) - s2.charAt(i) <0)
return -1;
else
;
}
return 0;
}
} }

【leetcode】8. String to Integer (atoi)的更多相关文章

  1. 【LeetCode】8. String to Integer (atoi) 字符串转换整数

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:字符串转整数,atoi,题解,Leetcode, 力扣,P ...

  2. 【LeetCode】8. String to Integer (atoi) 字符串转整数

    题目: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ca ...

  3. 【LeetCode】008. String to Integer (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  4. 【一天一道LeetCode】#8. String to Integer (atoi)

    一天一道LeetCode系列 (一)题目 Implement atoi to convert a string to an integer. Hint: Carefully consider all ...

  5. 【LeetCode】字符串 string(共112题)

    [3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...

  6. 《LeetBook》leetcode题解(8): String to Integer (atoi) [E]——正负号处理

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  7. 【LeetCode】7 & 8 - Reverse Integer & String to Integer (atoi)

    7 - Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Notic ...

  8. 【leetcode❤python】 8. String to Integer (atoi)

    #-*- coding: UTF-8 -*-#需要考虑多种情况#以下几种是可以返回的数值#1.以0开头的字符串,如01201215#2.以正负号开头的字符串,如'+121215':'-1215489' ...

  9. 【LeetCode】7、Reverse Integer(整数反转)

    题目等级:Easy 题目描述: Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 O ...

随机推荐

  1. mvc4 web-api 与unity搭建接口

    对于接口重要的应该是 功能实现,合法性验证,性能监控,日志等模块 通过unity aop功能可以实现统一的日志模块和性能监控. 1.新建mvc4 webapi项目 nuget添加 unity 3.0+ ...

  2. delphi 13 打印相关

    打印 页面设置 打印预览 文档属性     //---------------------------------------------------------------------------- ...

  3. MultiCardMenu

    https://github.com/wujingchao/MultiCardMenu MultiCardMenu-master.zip

  4. 内核映像的形成 —— KBuild体系

    1. http://blog.csdn.net/yunsongice/article/details/6046537 2. http://blog.csdn.net/yunsongice/articl ...

  5. ElasticSearch使用

    安装之前,请参考https://github.com/richardwilly98/elasticsearch-river-mongodb根据你的MongoDB版本号决定需要的elasticsearc ...

  6. Asp.Net MVC 3【Filters(过滤器)】

    这里分享MVC里的Filters(过滤器),什么是MVC里的过滤器,他的作用是什么? 过滤器的请求处理管道中注入额外的逻辑.他们提供了一个简单而优雅的方式来实现横切关注点.这个术语是指所有对应用程序的 ...

  7. flash 入门课知识小结

    一. 几种类型帧的小结:(关键帧.空白关键帧.普通帧)1. 特点  帧——是进行flash动画制作的最基本的单位,每一个精彩的flash动画都是由很多个精心雕琢的帧构成的,在时间轴上的每一帧都可以包含 ...

  8. hive-初看hive

    网上搜了一下找了很多介绍hive的资料,不是官方翻译就是含糊描述,对于刚接触的很难直观认识 我从一本介绍hadoop的书里找到了一些hive的资料,没太多废话.可以看看 http://pan.baid ...

  9. python(4)-迭代器 和 生成器

    迭代器是访问集合元素的一种方式.迭代器适合遍历一些巨大或无限的集合,比如几个G的文件.迭代器具有以下特点: 1. 访问者不需要关心迭代器内部的结构,只需通过__next__()方法不断取下一个内容 2 ...

  10. javaweb学习总结八(xml约束DTD)

    一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ...