LeetCode笔记:8. String to Integer (atoi)_Cloudox_的博客-程序员信息网

技术标签: LeetCode笔记  leetcode  LeetCode  

问题:

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.

大意:

实现 atoi 来将一个字符串转为一个整型。

暗示:小心考虑所有可能的输入案例。如果你想要挑战,请不要看下面的内容并问问你自己有哪些可能的输入案例。

注意:这个问题特意说的比较模糊(比如,没有给出输入规则)。你需要收集所有输入需求。

思路:

字符串转换成整型本身不难,麻烦的在于考虑到所有可能的情况并作出处理。

可能有的情况有:

    • 开头的负数
    • 开头的正数
  • 0 开头的数字
  • 空格开始的数字
  • 数字直接开头
  • 除了以上的情况外其余开头的都返回0
  • 数字中间夹了其余非数字字符的话就不考虑后面的内容了

基于以上考虑,我的代码考虑了很多情况并进行处理。

代码(Java):

public class Solution {
    
    public int myAtoi(String str) {
        String intStr = "";
        char[] tempArr = str.toCharArray();
        char[] arr = new char[tempArr.length];
        int num = 0;
        int j = 0;
        boolean ok = false;
        for (; num < tempArr.length; num++) {
            if (ok || tempArr[num] - ' ' != 0) {
                ok = true;
                arr[j] = tempArr[num];
                j++;
            }
        }

        if (arr.length == 0 || !((arr[0] - '0' <= 9 && arr[0] - '0' >= 0) || arr[0] - '-' == 0 || arr[0] - '+' == 0)) return 0;
        int i = 0;
        if (arr[0] - '+' == 0) i = 1;
        for (; i < arr.length; i++) {
            if ((arr[i] - '0' <= 9 && arr[i] - '0' >= 0) || (i == 0 && arr[i] - '-' == 0)) {
                intStr = intStr + arr[i];
            } else break;
        }
        if (intStr.length() == 0) return 0;
        else if (intStr.equals("-")) return 0;
        else if (i > 11) return intStr.charAt(0) - '-' == 0 ? -2147483648 : 2147483647;
        else if (Long.parseLong(intStr) > 2147483647) return 2147483647;
        else if (Long.parseLong(intStr) < -2147483648) return -2147483648;
        else return Integer.valueOf(intStr).intValue();
    }
}

合集:https://github.com/Cloudox/LeetCode-Record
版权所有:http://blog.csdn.net/cloudox_

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Cloudox_/article/details/53862559

智能推荐

挑战自已_dirqq64426的博客-程序员信息网

本以为到丰台是种解脱,一种逃离办公室的办法,可是到了之后我发现我错了。丰台的工作是无聊的,每天都要求呆在那儿,但没什么事可做,吃完晚饭后就只能回招待所看电视,我怎么可能这样就渡过一个月呢?浪费时间呀!不管怎么样,我一定要想办法实现我的计划!从下周开始必须实现我的计划,再拖下去我会死掉的呀......挑战自已!转载于:https://www.cnblogs.com/GaoJunTao/...

CentOS 7创建用户并授权_Android_la的博客-程序员信息网_centos给用户授权

一. 问题背景搭建MySQL8.0集群的时候,按照网上的博客要创建新的用户,然而创建后,无法使用新用户进行操作(比如mkdir,rm,vim,more一些列的命令都弹出无权限),因此去了解CentOS7如何创建用户并授权,此过程中学习到的知识做下笔记。参考自:文件权限中 chmod、u+x、u、r、w、x分别代表什么CentOS 7 中添加新用户并授权二. 知识储备2.1 查看文件/文件夹的权限只需输入命令ls -l或者ll,如下:rwx可以使用二进制位串来表示,比如111表示有rwx

python写入csv不换行,python - 如何使用python pandas .to_csv附加到csv时强制换行 - 堆栈内存溢出..._鳗鱼神君的博客-程序员信息网

当附加到csv时,我的第一行是从现有的最后一行而不是新行开始的。我一直在搜索,但我只是找到了在追加模式下打开csv或在写入csv时使用追加模式的基本用法。 我无法理解这里接受的答案( to_csv追加模式不会附加到下一个新行 ),因为它似乎要求在用f.write("/n") ”)写入(“/ n”)之前打开现有文件f.write("/n") 。 这个答案( 如何将pandas数据添加到现有的cs...

JavaWeb项目连接Oracle数据库_weixin_30426957的博客-程序员信息网

参考网址:http://jingyan.baidu.com/article/0320e2c1d4dd0b1b87507b38.html既然你要链接oracle数据库 ,那么首先就是先打开我们的oracle数据库了(登陆oracle后用scoot用户登录)2第二步,就是打开我们的MyEclipse开发工具3...

ZYNQ+FPGA读取SD卡BMP图片并通过HDMI显示_Qiweiii的博客-程序员信息网_fpga读取图片

代码下载https://github.com/qiweiii-git/qwi06_sdp2hdmi代码编译1.在linux下使用./makeall.sh即可自动编译vivado工程。如何使用linux自动编译工程请参考利用Linux自动编译Vivado工程2.在Windows下打开vivado,运行source run.tcl即可自动创建工程并编译。系统框图最终显示的图片代码解...

Java小白第四节------数据转换_weixin_49690251的博客-程序员信息网

• 数据转换“勿以小杯成大物”不同类型占用的内存空间不同byte &lt; int &lt; long低精度放入高精度永远不会溢出,并且总是成功的高精度放进低精度必然会有信息丢失1. 低精度向高精度转换隐形转化(自动转换)显性转化(强制转换)隐式转换含义:从低级类型像高及类型转化,系统将自动执行,程序员无需执行任何的操作,也可以叫做自动转换byte a = 8; // 8int b = a; // 8long c = b; // 8double d = c; // 8.0

随便推点

给我的Nokia3100_weixin_30393907的博客-程序员信息网

已经用了近四年了,开机关机键被我摁坏了,先是开机键(即顶上那个白色的橡胶东东)坏了,被指甲盖给顶穿了,于是扔掉后用钥匙什么呢,摁一下又可以开机了;后来,下面的那个灰色的开关也被硬硬地按掉了(把白色的橡胶去掉后可以看的见,那个东东被我给摁掉了),今天忘了及时充电,害得早上没能开机。解决方法: 1.重新换一个开机键。价格估计二十元吧,见:http://ks.cn.yahoo.com/q...

TCP 传递信息_weixin_30474613的博客-程序员信息网

什么是socket?Socket就是套接字。客户端与服务器之间通信用的。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。以下是试验代码:(vs2005/xp试验通过)一个服务器端与客户端交互,实现客户端与服务器...

oracle导入日志出不来,Oracle 11.2.0.1执行数据泵导入导出操作,导入日志报ORA_破晓朝阳的博客-程序员信息网

http://resources.arcgis.com/zh-cn/content/kbase?fa=articleShowd=38470 ArcSDE版本:9.3.1和10 在Oracle11.2.0.1数据库使用数据泵(EXPDP、IMPDP)进行数据导入导出,在导入(IMPDP)过程中在导入日志文件报 ORA-39083: Object type INDEX failed to creaht...

Unity里的静态批处理和动态批处理_Real_JumpChen的博客-程序员信息网

内容会持续更新,有错误的地方欢迎指正,谢谢!前言Unity在运行时可以将一些物体进行合并,从而用一个绘制调用来渲染他们。这一操作,我们称之为“批处理”,能得到越好的渲染性能。Unity中内建的批处理机制所达到的效果要明显强于使用几何建模工具的批处理效果,因为,Unity引擎的批处理操作是在物体的可视裁剪操作之后进行的,处理的几何信息少很多。材质只有拥有相同材质的物体才可...

VS调试技巧(上)_终成一个大象的博客-程序员信息网

转载自:http://blog.jobbole.com/45249/近碰巧读了Ivan Shcherbakov写的一篇文章,《11个强大的Visual Studio调试小技巧》。这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧。我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试技巧。(如果你是工作在托管代码下,调试器会...

第四章 标签页_weixin_33763244的博客-程序员信息网

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

推荐文章

热门文章

相关标签