【剑指offer】- 把字符串转换成整数 -46/67

简介: 【剑指offer】- 把字符串转换成整数 -46/67

1. 题目描述

2. 题目分析

  1. 对于字符串转为整数,比较简单,这里主要考察的是对于空指针、空字符串、非法输入、全部空格、是否溢出等一些特殊情况
  2. 首先,我们先考虑有空指针和空字符串情况,if (str.length() == 0) return 0;
  3. 空格情况,我们通过str.trim()去除空格,然后判断是否全为空格if (c.length == 0) { return 0; }
  4. 这时候,我们原本的字符串空格已经被我们处理掉了,我们需要判断字符串的正负性,便于我们之后的输出和遍历的开始下标。如果是负号的话,我们需要把标记位设置为-1,起始下标设置为1,如果是正号的话,我们需要把标记位设置为1,起始下标设置为1,如果什么都不是的话,我们需要把起始下标设置为0
  5. 处理非法输入:如果我们在遍历字符串的过程中,遇到if (c[i] < '0' || c[i] > '9') { break; }直接break,返回目前的sum即可。
  6. 溢出:因为我们的int的范围为Integer.MIN_VALUE ~ Integer.MAX_VALUE所以,我们在判断的时候,if (sum > dny || sum == dny && c[i] > '8') { return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; }此处的dny == Integer.MAX_VALUE/10
  7. 最后返回sum与标记位的乘积

3. 题目代码

public int StrToInt(String str) {
        if (str.length() == 0) {
      return 0;
    }
    char[] c = str.trim().toCharArray(); // 去除空格
    if (c.length == 0) {
      return 0;
    }
    // 判断第一个符号位是
    int flag = 1;
    int num = 1;
    // 我们判断第一个字符 是不是‘+’ ‘-’ 如果是的话 我们从下标1开始遍历
    // 如果不是,我们从下标0开始遍历
    if (c[0] == '-') {
      flag = -1;
    } else if (c[0] != '+') {
      num = 0;
    }
    int sum = 0;
    int dny = Integer.MAX_VALUE / 10;
    for (int i = num; i < c.length; i++) {
      // 也就是如果其中出现了非数字的数,我们直接判断这是一个无效输出
      // 返回0
      if (c[i] < '0' || c[i] > '9') {
        return 0;
      }
      if (sum > dny || sum == dny && c[i] > '8') {
        return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
      }
      sum = sum * 10 + (c[i] - '0');
    }
    return sum * flag;
    }


相关文章
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
58 0
|
7月前
|
Java 测试技术
java字符串练习题5、罗马数字转整数
java字符串练习题5、罗马数字转整数
67 0
|
7月前
|
算法 Java
每日一刷《剑指offer》字符串篇之把字符串转换成整数(atoi)
每日一刷《剑指offer》字符串篇之把字符串转换成整数(atoi)
60 0
每日一刷《剑指offer》字符串篇之把字符串转换成整数(atoi)
|
存储 算法 测试技术
力扣7-整数反转&力扣8-字符串转换整数 (atoi)
力扣7-整数反转&力扣8-字符串转换整数 (atoi)
87 0
|
算法 安全 测试技术
LeetCode - #13 罗马数字转整数
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
剑指offer 75. 把字符串转换成整数
剑指offer 75. 把字符串转换成整数
60 0
剑指offer 19. 表示数值的字符串
剑指offer 19. 表示数值的字符串
41 0
leetcode:12.整数转罗马数字
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
73 0
|
存储 算法 C++
LeetCode(7-整数反转&&8-字符串转换整数 (atoi)&&9-回文数)
LeetCode(7-整数反转&&8-字符串转换整数 (atoi)&&9-回文数)
LeetCode(7-整数反转&&8-字符串转换整数 (atoi)&&9-回文数)
LeetCode 08字符串转整数&&09回文数
LeetCode 08字符串转整数&&09回文数
93 0
LeetCode 08字符串转整数&&09回文数