力扣刷题笔记-08 字符串转整数

这篇具有很好参考价值的文章主要介绍了力扣刷题笔记-08 字符串转整数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

08 字符串转整数

属于对字符串进行操作的问题

百无一用是情深

问题

字符串里有数字,空格,正负号等,需要先过滤出来

在这道题目里,我们通常考虑字符串的组合是 “空格+正负号+数字”,一开始我想可能是“正负号+空格+数字”,但是这样的组合根本不可能是数字啊,没什么意义。

循环条件

  1. for循环
  2. 字符串去除空格之后的length
  3. 起始位置取决于字符串有没有正负号

思路

  1. 去掉空格,判断长度
  2. 判断有没有正负号,决定startIndex从0还是1开始
  3. 遍历数字,拼接成整数:res = res * 10 + temp,类似于上面的整数反转
  4. 返回的时候把sign加上

code

public int myAtoi(String s) {
        s = s.trim();

        // 判断字符串是不是为空
        if (s.isEmpty()){
            return 0;
        }

        char firstChar = s.charAt(0);

        // 去除空格后,第一个字符如果既不是正负号也不是数字,那就返回0
        if (firstChar != '+' && firstChar != '-' && !Character.isDigit(firstChar)){
            return 0;
        }

        int res = 0;
        int sign = 1;
        // 这里要设置一个startIndex,因为正号可以不写,如果是正号,就要从第0位开始循环
        int startIndex = 0;

        if (firstChar == '-' || firstChar == '+'){
            // 说明有符号,正号或者负号都有可能,那么数字起始位就要向后挪一位
            startIndex = 1;
            sign  = (firstChar == '-') ? -1 : 1;
        }
        
        // 遍历,从1开始是因为前面认为是符号位
        for (int i = startIndex; i < s.length(); i++){
            // temp用来临时接收每个位置上的字符
            char temp = s.charAt(i);
            if (!Character.isDigit(temp)){
                break;
            }
            
            // 在循环内部,暂时没有考虑负号,只有在满足if条件,也就是绝对值溢出了,再去考虑正负号
            // (temp - '0') > 7,即使是负数,也就是最后一位是8,那么也一定越界,所以可以覆盖正负数。
            if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (temp - '0') > 7)){
                return (sign == 1) ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }

            /**
             * 注释掉的这部分犯了个错误
             * 错在,整个for循环里面并没有将数字添加正负号,所以所有的数字都是整数,只需要考虑正整数溢出的情况
             */
//            if (sign == -1){
//                // 说明是负数,看当前值是不是超越了边界情况
//                if (res < Integer.MIN_VALUE/10 || (res == Integer.MIN_VALUE/10 && (temp - '0') > 8 )){
//                    return Integer.MIN_VALUE;
//                }
//            } else {
//                if (res > Integer.MAX_VALUE || (res == Integer.MAX_VALUE && (temp - '0') > 7)){
//                    return Integer.MAX_VALUE;
//                }
//            }
            res = res * 10 + (temp - '0');
        }
  			// 把符号考虑进来
        return res * sign; 

    }

key point

1. 在循环内部,并没有正负号,所以在判断越界的情况,只需要考虑绝对值是不是超过了,就是result> Integer.MAX_VALUE这个情况
2. 从第几位开始处理数字

从第几位开始,要考虑一下几种情况,这些情况都是去除了空格位前提

  1. 首位有正号或者负号,那就要startIndex=1
  2. 首位没有,其实此时就是正数,那么startIndex = 0;

所以我们的处理方案是:startIndex默认位0,sign默认位1.文章来源地址https://www.toymoban.com/news/detail-711672.html

到了这里,关于力扣刷题笔记-08 字符串转整数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【力扣刷题】整数拆分(动态规划)

    个人简历: 全栈领域新星博主, 万粉博主、 帮助初学者入门,记录自己的学习过程 个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 热门专栏:初学者入门C语言_天寒雨落的博客-CSDN博客   目录 动态规划 整数拆分 题目 思路 代码 执行结果 其基本思想是将待求解

    2024年02月03日
    浏览(29)
  • 力扣刷题第二天 统计整数数目(每天一题)

    统计整数数目 给你两个数字字符串  num1  和  num2  ,以及两个整数  max_sum  和  min_sum  。如果一个整数  x  满足以下条件,我们称它是一个好整数: num1 = x = num2 min_sum = digit_sum(x) = max_sum . 请你返回好整数的数目。答案可能很大,请返回答案对  109 + 7  取余后的结果。 注

    2024年01月16日
    浏览(25)
  • 力扣刷题笔记

    诸神缄默不语-个人CSDN博文目录 我以前刷过一波力扣,然后全忘了……从0开始的力扣复活赛! 以前刷题用的是Java,现在Java几乎忘光了,所以现在是Python 3 + Java双语选手。 以下题目按照力扣官方顺序排列。 449. 序列化和反序列化二叉搜索树 1281. 整数的各位积和之差 1749. 任意

    2024年02月14日
    浏览(28)
  • 力扣刷题笔记-05 最长回文子串

    半山腰有点拥挤,你要去山顶看看。 什么是回文 从左边出发,字符的顺序和从右边出发是一样的,比如aba,abba。那么基于这个理论,我们就可以想到解决方案: 找一个中心点,向两边出发,左右两边各移动一位,如果相同就证明是回文子串,不相同就停止,找下一个中心点

    2024年02月08日
    浏览(30)
  • 力扣刷题笔记-06 N字形变换

    不要混日子,小心日子把你混了 对于题目的理解 比如说,我给一个字符串,LEETCODE,行数为3,然后按照N字形排列,就是下面这个排列方式。排列完之后正常读取,结果就是LCETOEED。这叫做N字形变换。 这个例子里给的行数就是3,往下排三行,然后往右往上走。 思路 边界情况

    2024年02月08日
    浏览(20)
  • 力扣刷题笔记-86 单链表的分解

    你说你会改变,但是你只是为了解决当时的冲突而讲的话。 给你一个链表头节点head和x,要求链表中所有小于x的节点都出现在大于或等于x的节点之前 例如:head = [1,4,3,2,5,2], x = 3; 输出:[1,2,2,4,3,5] 在合并两个链表的时候,是将两个链表合并成一个,拆分的时候,是将一个链表

    2024年03月13日
    浏览(21)
  • 考研算法第46天: 字符串转换整数 【字符串,模拟】

    题目前置知识 c++中的string判空 c++中最大最小宏 字符串使用+发运算将字符加到字符串末尾  题目概况 AC代码

    2024年02月12日
    浏览(43)
  • java中读取用户输入的整数、字符、字符串、单词

    1、取用户输入的整数 如果你想从控制台读取整数,可以使用 .nextInt()方法:例如:  这段代码向用户询问输入一个数字,并使用 .nextInt() 方法读取该数字。该方法读取用户输入,并将其作为整数返回,然后存储在变量 number 中。 2、取用户输入的字符  如果你想从控制台读取

    2024年02月06日
    浏览(54)
  • 力扣_字符串7—交错字符串

    给定三个字符串 s 1 、 s 2 、 s 3 s1、s2、s3 s 1 、 s 2 、 s 3 ,请你帮忙验证 s 3 s3 s 3 是否是由 s 1 s1 s 1 和 s 2 s2 s 2 交错 组成的。 两个字符串 s s s 和 t t t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: s = s 1 + s 2 + . . . + s n s = s1 + s2 + ... + sn s = s 1

    2024年02月20日
    浏览(31)
  • golang字符串转64位整数

    在Go语言中,可以使用strconv包中的ParseInt函数将字符串转换为64位整数。以下是一个示例代码: 在上述代码中,我们首先导入了fmt和strconv包。然后,我们定义了一个字符串变量str,其值为\\\"12345\\\"。接下来,我们使用strconv.ParseInt函数将字符串转换为64位整数,并将结果存储在变量

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包