力扣刷题:整数反转、 字符串转换整数 (atoi)、回文数

今日又开始了


一、整数反转

原题链接:https://leetcode.cn/problems/reverse-integer/

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0

提示:

-231 <= x <= 231 - 1

代码(C)


int reverse(int x){
    
    
    int i=0;
    while(x){
    
    
        if (i < INT_MIN / 10 || i> INT_MAX / 10) {
    
     //注意,循环的过程中就要判断是否会溢出
        return 0;
        }
        i=i*10+x%10;
        x=x/10;
    }
    return i;
}


二、 字符串转换整数 (atoi)

题目链接:https://leetcode.cn/problems/string-to-integer-atoi/

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格
检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
返回整数作为最终结果。
注意:

本题中的空白字符只包括空格字符 ’ ’ 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:

输入:s = “42”
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:“42”(当前没有读入字符,因为没有前导空格)
^
第 2 步:“42”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
^
第 3 步:“42”(读入 “42”)
^
解析得到整数 42 。
由于 “42” 在范围 [-231, 231 - 1] 内,最终结果为 42 。
示例 2:

输入:s = " -42"
输出:-42
解释:
第 1 步:" -42"(读入前导空格,但忽视掉)
^
第 2 步:" -42"(读入 ‘-’ 字符,所以结果应该是负数)
^
第 3 步:" -42"(读入 “42”)
^
解析得到整数 -42 。
由于 “-42” 在范围 [-231, 231 - 1] 内,最终结果为 -42 。
示例 3:

输入:s = “4193 with words”
输出:4193
解释:
第 1 步:“4193 with words”(当前没有读入字符,因为没有前导空格)
^
第 2 步:“4193 with words”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
^
第 3 步:“4193 with words”(读入 “4193”;由于下一个字符不是一个数字,所以读入停止)
^
解析得到整数 4193 。
由于 “4193” 在范围 [-231, 231 - 1] 内,最终结果为 4193 。

提示:

0 <= s.length <= 200
s 由英文字母(大写和小写)、数字(0-9)、’ ‘、’+‘、’-’ 和 ‘.’ 组成

代码(C)

int myAtoi(char * s){
    
     
    int index=0,tag =0;//tag0表正数
    while(s[index]==' ')
        index++;//跳过所有空字符
    if(s[index]=='+'||s[index]=='-'){
    
    
        if(s[index]=='-')
            tag=1;
        index++;//统一后移
    }
    double sum =0;//测试可知,后面必需跟连续的数字字符,遇到其他任意非数字字符,结束  注意00可以开头 
    while(s[index]>='0'&&s[index]<='9'){
    
    
        sum+=(s[index]-'0');
        if(sum>=INT_MAX&&tag==0)//上下限
            return INT_MAX;
        if((0-sum)<=INT_MIN)
            return INT_MIN;
        if(s[index+1]>='0'&&s[index+1]<='9')
            sum*=10;
        index++;
    }
    if(tag==1)
        return (int)(0-sum);
    return (int)sum;
}


三、回文数

原题链接:https://leetcode.cn/problems/palindrome-number/
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true
示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

提示:

-231 <= x <= 231 - 1

代码(C)


bool isPalindrome(int x){
    
    
    long int a=x,b=0;
    if(x>=0&&x<10)
        return true;
    else if(x<0)
        return false;
    else while(a>0)
    {
    
    
        b=b*10+a%10;
        a=a/10;
    }
    if(b==x) return true;
    else return false;
}


猜你喜欢

转载自blog.csdn.net/weixin_62529383/article/details/133070060
今日推荐