首页 > 其他分享 >【剑指 Offer】67. 把字符串转换成整数

【剑指 Offer】67. 把字符串转换成整数

时间:2023-04-18 10:35:54浏览次数:39  
标签:转换成 Offer res 67 示例 整数 num 字符 字符串

【题目】

写一个函数 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) 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof

【思路】

1.先去空然后用数组保存字符串

2.然后遍历 res = res*10+num[i]

3.判断是否超过最大范围,如果超过,直接返回,没超过继续累加

 

【代码】

class Solution {
   public  int strToInt(String str) {
        char[] num = str.trim().toCharArray();
        if(num.length==0) return 0;
        // 先得到符号和字符串组成的数组
        // 然后按位数将其组合成数字
        boolean isFS = false;
        int i = 0;
        long res = 0;
        if(num[i]=='-'){
            isFS = true;
            i++;
        }else if(num[i]=='+'){
            i++;
        }
        for(;i<num.length;i++){
            if(i==0&&(num[i]<'0'||num[i]>'9')){
                return 0;
            }
            if(num[i]>='0'&&num[i]<='9'){
                res = res*10+num[i]-48;
                if( res >Integer.MAX_VALUE){
                    if(isFS) return Integer.MIN_VALUE;
                    else return Integer.MAX_VALUE;
                }
            }else{
                break;
            }
        }
        if(isFS){
            res = -res;
        }
        return (int)res;
    }
}

标签:转换成,Offer,res,67,示例,整数,num,字符,字符串
From: https://www.cnblogs.com/End1ess/p/17328678.html

相关文章

  • 将map对象参数转换成String=String&方式
    *将map对象参数转换成String=String&方式*@paramparams*@paramcharset*@return*@throwsUnsupportedEncodingException*/publicstaticStringgenerateParams(Map<String,String>params,Stringcharset)throwsUnsupportedEn......
  • 动态规划:剑指 Offer 42. 连续子数组的最大和
    题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 提示:1<= arr.length<=10^5-100<=arr[i]<=100   classSolution{publicintmaxSubArray(intnums[]){intres......
  • 远程的文件转换成byte数组
    1、使用OkHttp3库来将远程的GIF文件转换成InputStreamOkHttpClientclient=newOkHttpClient();Requestrequest=newRequest.Builder().url("http://xxxxx/resources/upload/20230414/3_yk_anim_cn_64_1.gif").build();......
  • 【剑指 Offer】 31. 栈的压入、弹出序列
    【题目】输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。 示例1:......
  • 【剑指 Offer】 29. 顺时针打印矩阵
    【题目】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7] 限制:0<=matrix.leng......
  • ACCT867 Finance for Accountants
    ACCT867FinanceforAccountantsTrimesterOne,2023IndividualAssignmentDueDate:1stMay2023,at12:00pm(noon)Weighting:30%(20%forWrittenAssignmentand10%forOralPresentation)Type:IndividualassignmentLength:Maximum2,000words(excludingtab......
  • Uva--679 Dropping Balls(二叉树的编号)
    记录23:282023-4-16https://onlinejudge.org/external/6/679.pdfreference:《算法竞赛入门经典第二版》例题6-6二叉树,这里是完全二叉树,使用模拟的方式应该会TLE(虽然我用模拟的方式也TLE了,但不是这个原因,下面会提到原因)不用模拟的方式,转换思路,使用递归的方式去思考。这里......
  • 【剑指 Offer 】62. 圆圈中最后剩下的数字
    【题目】0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的......
  • 【剑指 Offer】 57 - II. 和为s的连续正数序列
    【题目】输入一个正整数target,输出所有和为target的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例1:输入:target=9输出:[[2,3,4],[4,5]]示例2:输入:target=15输出:[[1,2,3,4,5],[4,5,6],[7,8]] 限制:   1<=target......
  • 剑指 Offer 64. 求1+2+…+n
    题目链接:剑指Offer64.求1+2+…+n方法:逻辑运算符短路原则解题思路例如:对于表达式\(A&&B\),若\(A\)为\(false\),那么就不会计算\(B\);代码classSolution{public:intsumNums(intn){n&&(n+=sumNums(n-1));returnn;}};复杂度......