# LeetCode集锦(三) - 第9题 Palindrome Number

Dear 丶 2022-10-01 09:56 60阅读 0赞

LeetCode集锦(三) - 第9题 Palindrome Number

问题

  1. Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
  2. Example 1:
  3. Input: 121
  4. Output: true
  5. Example 2:
  6. Input: -121
  7. Output: false
  8. Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
  9. Example 3:
  10. Input: 10
  11. Output: false
  12. Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
  13. Follow up:
  14. Coud you solve it without converting the integer to a string?
  15. 复制代码

翻译:

确定整数是否是回文。当一个整数向后读取与向前读取相同的内容时,它就是一个回文。

示例1:

输入:121 输出:真正的

示例2:

输入:-121 输出:假 说明:从左到右,是-121。从右到左,变成121-。因此它不是回文。

示例3:

输入:10 输出:假 说明:从右向左读取01。因此它不是回文。

跟进:

你能在不把整数转换成字符串的情况下解出它吗?


解题思路

本题目标是判断一个数字是不是回文数字。

回文数字的定义:翻转数字后,和本身一样则为回文数字。

根据回文数字的定义,负数是不符合要求的,毕竟符号的限制存在,个位数一定是回文数字。

在定义中,是需要翻转数字,判断前后是否一致,很容易想到可以转化为String,然后翻转一下,是否一致就可以。

还有一种方式,就是一位位的取,重新组装数字,判断是否一致,但是这样需要避免溢出的问题。

解题方法

  1. 第一种解体方法,按照我们的思路来编辑,代码如下

    1. //负数直接不符合要求
    2. if (x < 0) {
    3. return false;
    4. }
    5. StringBuilder stringBuilder = new StringBuilder(x + "");
    6. return stringBuilder.toString().equals(stringBuilder.reverse().toString());
    7. 复制代码

    时间复杂度: 该方案用了并没有使用循环,其实在翻转过程中应该是用来循环,但是这边不计算,所以f(n)=1=1;所以O(f(n))=O(1),即T(n)=O(1)

    空间复杂度: 该方案使用了StringBuilder,相当于复刻了一个数组,所以空间复杂度是O(1);

  2. 第二种解题方法,代码如下:

    1. //负数直接不符合要求
    2. if (x < 0) {
    3. return false;
    4. }
    5. int temp = x;
    6. long result = 0;
    7. while (temp != 0) {
    8. long remainder = temp % 10;
    9. result = result * 10 + remainder;
    10. temp /= 10;
    11. }
    12. return result == x;
    13. 复制代码

    时间复杂度: 该方案用了单层循环,所以f(n)=(log10(n)+1)/2=log10(n)/2;所以O(f(n))=O(log10(n))=O(log10(n)),即T(n)=O(log10(n))

    空间复杂度: 该方案并没有使用额外的空间在存储数值,所以为O(1);

总结

本题的大致解法如上所诉,方案2没有利用到字符串,直接由本身出发,空间和时间上都比方案一快,唯一一点是需要用long来控制,避免越界。

转载于:https://juejin.im/post/5cd12dc36fb9a0325031c80e

发表评论

表情:
评论列表 (有 0 条评论,60人围观)

还没有评论,来说两句吧...

相关阅读