首页 > 其他分享 >Leetcode第8题:字符串转换整数 (atoi)

Leetcode第8题:字符串转换整数 (atoi)

时间:2022-09-18 21:15:09浏览次数:80  
标签:10 digit index res VALUE atoi 字符串 Integer Leetcode

/**
这题就是要细心,首先要通过循环去掉前面的空格
然后看看有没有正号或者负号,或者没有符号
再看看数字有没有越界
 */
class Solution {
    public int myAtoi(String s) {
        //首先要把字符转换成数组的形式存放
        char[] chars=s.toCharArray();
        //该数组的长度
        int n=chars.length;
        //定义初始的指针
        int index=0;
        //循环去掉前面的空格
        while(index<n && chars[index] == ' '){
            index++;
        }
        //如果去完空格就到末尾了就说明这就是没有数字
        if(index==n){
            return 0;
        }
        
        //现在要判断符号
        boolean negative=false;
        //遇到负号
        if(chars[index]=='-'){
            negative=true;
            index++;
        //遇到正号
        }else if(chars[index]=='+'){
            index++;
        //遇到其他无关的符号,或者是那种前面有字母后面有数字的情况
        }else if(!Character.isDigit(chars[index])){
            return 0;
        }

        //现在看数字有没有越界
        int res=0;
        while(index<n && Character.isDigit(chars[index])){
            // 获取字符串数字的单个数字
            int digit = chars[index] - '0';
            // System.out.println(digit);
            if(res >(Integer.MAX_VALUE - digit)/10){
                // 本来应该是 ans * 10 + digit > Integer.MAX_VALUE
                // 但是 *10 和 + digit 都有可能越界,所有都移动到右边去就可以了。
                return negative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }
            res = res * 10 + digit;
            index++;
        }
        return negative ? -res : res;
    }
}

SB工作太多,都没时间看大佬怎么写的

标签:10,digit,index,res,VALUE,atoi,字符串,Integer,Leetcode
From: https://www.cnblogs.com/PaturNax/p/16705779.html

相关文章

  • leetcode 622.设计循环队列
    622.设计循环队列难度中等402  设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它......
  • leetcode 652 寻找重复的子树
    652.寻找重复的子树难度中等630  给你一棵二叉树的根节点root,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵......
  • leetcode 127 -- 哈希表
    题目描述217手写哈希表classSolution{public:#defineDEFAULT_LEN16#defineDEFAULT_FACTOR0.75fconstfloatfactor=DEFAULT_FACTOR;typed......
  • leetcode1047-删除字符串中的所有相邻重复项
    1047.删除字符串中的所有相邻重复项 方法一:stack 这种做法是纯纯的小丑做法,因为string类型本身就可以实现栈。这样的做法结束之后还要出栈倒序放到字符串里,时间开销......
  • leetcode 2414. 最长的字母序连续子字符串的长度
    leetcode2414.最长的字母序连续子字符串的长度题目描述字母序连续字符串是由字母表中连续字母组成的字符串。换句话说,字符串"abcdefghijklmnopqrstuvwxyz"的任意子......
  • C++ Unicode字符串
    字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,VisualC++里边定义字符......
  • leetcode 6184. 统计共同度过的日子数
    leetcode6184.统计共同度过的日子数题目描述Alice和Bob计划分别去罗马开会。给你四个字符串arriveAlice,leaveAlice,arriveBob和leaveBob。Alice会在日期arr......
  • 字符串的各种处理
    整行读入string,getline(cin,string)整行读入char[]1.cin.getline(char[],length)2.fgets(char[],length,stdin)3.scanf("%[^\n]",&s);=>[]表示读入字符......
  • 1624. 两个相同字符之间的最长子字符串
    1624.两个相同字符之间的最长子字符串给你一个字符串s,请你返回两个相同字符之间的最长子字符串的长度,计算长度时不含这两个字符。如果不存在这样的子字符串,返回-1......
  • [LeetCode] 2007. Find Original Array From Doubled Array
    Anintegerarray original istransformedintoa doubled array changed byappending twicethevalue ofeveryelementin original,andthenrandomly sh......