Kerberos认证原理 Apache Nginx 观察者模式 image validation dynamic vuejs2 逻辑端口 coldfusion angular ui router vue样式 vuejs视频教程 jquery遍历子元素 jq选择子元素 jquery解析json数据 web前端毕业设计题目 spark文档 java算法培训 网络游戏server编程 windows杀死进程命令 升级python版本 java高级特性 java中正则表达式 java异常处理 java中collection vb编程 java网络编程 python教程视频 din字体 winhex使用教程 战地联盟辅助 dep dll下载 司司网吧 彻底卸载mysql 设备管理器在哪 氤氲之息哪里爆率高 a1474 opengl版本过低
当前位置: 首页 > 学习教程  > 编程语言

【LeetCode 力扣 67】把字符串转化为整数

2021/1/28 23:19:54 文章标签:

学习目标: 目标:熟练运用 Java所学知识 题目内容: 本文内容: 使用Java实现:把字符串转化为整数 文章目录学习目标:题目内容:题目描述解题思路实现代码运行结果题目描述 写一个函数 StrToInt&…

学习目标:

目标:熟练运用 Java所学知识


题目内容:

本文内容: 使用Java实现:把字符串转化为整数


文章目录

  • 学习目标:
  • 题目内容:
  • 题目描述
  • 解题思路
  • 实现代码
  • 运行结果

题目描述

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。

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

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

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

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

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

说明:

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

示例 1:

输入: “42”
输出: 42

示例 2:

输入: " -42"
输出: -42
解释: 第一个非空白字符为 ‘-’, 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

示例 3:

输入: “4193 with words”
输出: 4193
解释: 转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。

示例 4:

输入: “words and 987”
输出: 0
解释: 第一个非空字符是 ‘w’, 但它不是数字或正、负号。
因此无法执行有效的转换。

示例 5:

输入: “-91283472332”
输出: -2147483648
解释: 数字 “-91283472332” 超过 32位有符号整数范围。
因此返回 INT_MIN (−231) 。

解题思路

首先将字符串放到字符数组中,定义一个标志位判断数组第一位正负号;
再使用for循环遍历数组,除去符号位遇到的第一个不是数字则返回0;
如果是数字则进行转换;
下面重要的一步就是判断是否越界

  tmp = 10 * newInt + (c[i] - '0');
     if (tmp / 10 != newInt) {
            return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
      }
        newInt = tmp;

如果当前数字除以10不等于上一次循环的整数则已经越界,返回最大值或者最小值

实现代码

public class Practice_01 {
    public static void main(String[] args) {
        //字符串转换整数
        String str="  0000000000012345678";
        System.out.println(StrToInt(str));
    }

    public static int StrToInt(String str) {
        char[] c = str.trim().toCharArray();//除去字符串首尾位置的空格、换行符
        if (c.length == 0) return 0;
        int newInt = 0;
        int tmp;
        int sign = 1;//正负标志位
        int i = 1;
        if (c[0] == '-') {
            sign = -1;
        } else if (c[0] != '+') {
            i--;
        }
        for (; i < c.length; i++) {
            if (c[i] > '9' || c[i] < '0') {
            //如果第一位不是数字,则退出循环
                break;
            }
            tmp = 10 * newInt + (c[i] - '0');//将数组元素转化为整数
            if (tmp / 10 != newInt) {
            //是否越界判断,当前值除以10 不等于上次循环得到的整数则越界
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            newInt = tmp;
        }

        return newInt * sign;
    }
}

运行结果

12345678

本文链接: http://www.dtmao.cc/news_show_650159.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?