【剑指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;
    }


相关文章
|
2天前
leetcode-415:字符串相加
leetcode-415:字符串相加
25 0
|
2天前
|
Java 测试技术
java字符串练习题5、罗马数字转整数
java字符串练习题5、罗马数字转整数
28 0
|
2天前
|
存储
【字符串】13. 罗马数字转整数
【字符串】13. 罗马数字转整数
|
2天前
|
算法 Java
每日一刷《剑指offer》字符串篇之把字符串转换成整数(atoi)
每日一刷《剑指offer》字符串篇之把字符串转换成整数(atoi)
36 0
每日一刷《剑指offer》字符串篇之把字符串转换成整数(atoi)
|
2天前
|
Java 测试技术 Python
每日一题《剑指offer》字符串篇之表示数值的字符串
每日一题《剑指offer》字符串篇之表示数值的字符串
28 0
每日一题《剑指offer》字符串篇之表示数值的字符串
|
11月前
|
存储 算法 测试技术
力扣7-整数反转&力扣8-字符串转换整数 (atoi)
力扣7-整数反转&力扣8-字符串转换整数 (atoi)
65 0
|
11月前
剑指offer 75. 把字符串转换成整数
剑指offer 75. 把字符串转换成整数
42 0
|
11月前
剑指offer 19. 表示数值的字符串
剑指offer 19. 表示数值的字符串
30 0
|
12月前
004. leetcode415. 字符串相加(002)
1. 字符串中insert函数的使用(具体看这篇博客☞《从零开始实现 std::string:让你更深入地了解字符串的本质》) 2.进阶相关题(《leetcode43. 字符串相乘》)
42 0
|
存储 算法 C++
LeetCode(7-整数反转&&8-字符串转换整数 (atoi)&&9-回文数)
LeetCode(7-整数反转&&8-字符串转换整数 (atoi)&&9-回文数)
LeetCode(7-整数反转&&8-字符串转换整数 (atoi)&&9-回文数)