1. 程式人生 > >LeetCode7 Reverse Integer 題解(數的逆序)

LeetCode7 Reverse Integer 題解(數的逆序)

LeetCode7 Reverse Integer 題解

題目

Given a 32-bit signed integer, reverse digits of an integer.

輸入輸出例項

input:123
output:321

intput:120
output:21

input:-123
output:-321

核心演算法
int result = 0;
while(n!=0){
    result = result*10+n%10;
    n /= 10;
}
其他注意的地方
  • 考慮特殊情況,有時需要特判

    如 input:0

    input:-2147483648(即INT_MIN)

  • 資料溢位:

    如:long long a = 1<<31-1;

    等號右邊溢位 1預設為int型,1<<31溢位

    修改:long long a = 1ll<<31-1
    或者 long long a = INT_MAX;

程式碼

class Solution {
public:
    int reverse(int x) {
        string s;
        if(x>=0){
            long long result = 0;
            while(x!=0){
                result = result*10
+x%10; x/=10; } if(result<=INT_MAX) return result; else return 0; }else{ long long a = x; a = -1ll*a; //注意,若直接使用x=-1*x的話,當遇到輸入x為INT_MIN時,會出現資料溢位 long long result = 0
; while(a!=0){ result = result*10+a%10; a/=10; } if(result<=1ll<<31) //注意:若使用1<<31,會出現資料溢位(1預設為int型) int的資料範圍為[-1<<31 - 1<<31-1] return (-1*result); else return 0; } } };