[LeetCode]9. Palindrome Number

来源:互联网 发布:c语言程序编程教学 编辑:程序博客网 时间:2024/05/20 20:18

[LeetCode]9. Palindrome Number

题目描述

这里写图片描述

思路1

遍历一次,栈保存前1/2, 后1/2比较

代码1

// version 1bool isPalindrome(int x) {    string num = std::to_string(x);    stack<char> s;    bool res = true;    int len = num.size(), flag = floor(len / 2);    for (int i = 0; i < len; ++i){        if (len % 2 && i == flag)            continue;        if (i < flag){            s.push(num[i]);        }        else{            if (s.top() != num[i]) {                res = false;                break;            }            s.pop();        }    }    return res;}

思路2

不需要栈,遍历1/2即可

代码2

// version 2bool isPalindrome(int x) {    string num = std::to_string(x);    bool res = true;    int len = num.size(), flag = floor(len / 2);    for (int i = 0; i < flag; ++i){        if (num[i] != num[len - i - 1]){            res = false;            break;        }    }    return res;}

思路3

考虑空间复杂度要求O(1)

代码3

// version 3bool isPalindrome(int x) {    int len = (int)(log(x) / log(10) + 1), mid = (floor)(len / 2);    int res = 0, source = x;    for (int i = 0; i < mid; ++i){        res += (x % 10) * pow(10, i) + (x % 10) * pow(10, len - i - 1);        x = x / 10;    }    if (len % 2){        res += (x % 10) * pow(10, mid);    }    return res == source;}

思路4

考虑空间复杂度基础上优化时间

代码

// version 4bool isPalindrome(int x) {    if (x < 0 || x && x % 10 == 0)        return false;    int sum = 0;    while (sum < x){        sum = sum * 10 + x % 10;        x /= 10;    }    return sum == x || x == sum / 10;}
0 0
原创粉丝点击