leetcode 之整数反转

1. 题目描述:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题思路:

自己的解题思路:

int reverse(int x){
    char data[32] = "";
    int len = 0, temp = 0;
    long int y = 0; 

    sprintf(data, "%d", x); //change x to string
    len = strlen(data);     //get string's length
    if (data[0] == '-')
        temp = 1;

    y = 0;
    for(len; len>temp;) {
        y = y*10 + ((data[--len]-48)); //char to int, need to reduce 48
    }
    if (temp)
        y = -y;
    if (y > 2147483647 || y < -2147483648)
        return 0;

    return y;
}

目前了解的比较优秀的解题思路:

int reverse(int x){
    long count=0;

    while(x){
        count=count*10+x%10;
        x=x/10;
    }
    return count>INT_MAX||count<INT_MIN? 0 : count;
}

3. 知识点总结:

a. 数学方法.

注意: 负数对10取余数后, 也为负数.

          负数0至-9,对10去除 /的结果为0.

b. 整形最大值最小值判断方法.

方法一:

可以用INT_MAX或者INT_MIN判断.

count>INT_MAX||count<INT_MIN

方法二:

可以用强制类型转换判断:

eg: count != (int)count ? 0 : count;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章