当前位置: 首页 > news >正文

算法面试题:字符串转换整数 (atoi)

请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明:

假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

public static  int myAtoi(String str) {
        if(str==null||str.length()==0||str.trim().length()==0) return 0;
        str = str.trim();

        char firstChar = str.charAt(0);
        int sign = 1;
        int start = 0;
        long res = 0;
        if(firstChar=='+'){
            sign = 1;
            start++;
        }else if(firstChar=='-'){
            sign = -1;
            start++;
        }


        for(int i =start;i<str.length();i++){
            if(!Character.isDigit(str.charAt(i))){
                return (int)res*sign;
            }
            res = res*10 + (str.charAt(i)-'0');
            if(sign==1&& res > Integer.MAX_VALUE)  return Integer.MAX_VALUE;
            if(sign==-1 && res > Integer.MAX_VALUE) return Integer.MIN_VALUE;
        }

        return (int)res*sign;
    }

    public boolean isNumeric(String s) {
        if (s != null && !"".equals(s.trim()))
            return s.matches("^[0-9]*$");
        else
            return false;
    }

相关文章:

  • 电话的前世今生
  • abstract 和Interface的共同点和区别以及应用场景
  • 算法面试题:最长回文子串
  • SpringMVC AJAX向后台传递数组参数/实体集合
  • 算法面试题:无重复字符的最长子串
  • 盒子模型高级应用
  • WRONGTYPE Operation against a key holding the wrong kind of value
  • TunnelBroker for EdgeRouter 后记
  • redis.properties 最详细参数解析
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • redis和memcahed的共同点,区别以及应用场景
  • mysql 去除密码登录
  • express中的路径区别
  • 团队作业2——需求分析原型设计
  • redis五种数据类型的实现方式,常用命令,应用场景
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【翻译】babel对TC39装饰器草案的实现
  • 2017届校招提前批面试回顾
  • angular学习第一篇-----环境搭建
  • Flex布局到底解决了什么问题
  • Javascript 原型链
  • Laravel 实践之路: 数据库迁移与数据填充
  • node入门
  • rc-form之最单纯情况
  • windows下mongoDB的环境配置
  • Zsh 开发指南(第十四篇 文件读写)
  • 初识 beanstalkd
  • 搭建gitbook 和 访问权限认证
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 两列自适应布局方案整理
  • 那些被忽略的 JavaScript 数组方法细节
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用权重正则化较少模型过拟合
  • 世界上最简单的无等待算法(getAndIncrement)
  • 小程序button引导用户授权
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #Linux(帮助手册)
  • #数学建模# 线性规划问题的Matlab求解
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (5)STL算法之复制
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Note)C++中的继承方式
  • (剑指Offer)面试题34:丑数
  • (转)VC++中ondraw在什么时候调用的
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • *2 echo、printf、mkdir命令的应用
  • .equals()到底是什么意思?
  • .net 7 上传文件踩坑
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET 依赖注入和配置系统
  • .Net的DataSet直接与SQL2005交互
  • .NET企业级应用架构设计系列之技术选型
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • ??myeclipse+tomcat
  • @基于大模型的旅游路线推荐方案