leetcode 9 Palindrome Number

xiaoxiao2021-02-28  108

1. 题目分析

  题目描述:Determine whether an integer is a palindrome. Do this without extra space.   该题含义:判断所给定的函数是不是回树,且不能占用额外的空间计算。   题目分析:如果将该整数进行倒转,存为另一个整数,然后对两个整数进行对比,会占用额外的计算空间,所以该种方法不适用。所以,取整数第一位、最后一位进行对比,而后去掉该两位后继续使用该方法进行手尾对比能够解决这个问题。

2. 题目解答–cpp

class Solution { public: bool isPalindrome(int x) { //当给定函数为负数时,返回false。 if (x < 0) return false; int count = 1; //计算所给定的整数的最高位是哪一位,Eg:x=323,count=100 while(x/count >=10) { count *= 10; } //取首尾进行对比后去掉首尾 while (x > 0) { int left = x/count; int right = x%10; if (left == right) { x = x%count/10; count /= 100; } else { return false; } } return true; } };

3. 心得体会

起初在判断给定整数的最高位时,使用的方法是除10计数,即:

int cp = x; int count = 0; while(cp / 10 > 0) { cp = cp / 10; count++; }

  该种方法的缺点是:在进行判断的时候需要使用pow()方法来计算10的count次幂,而pow()方法的参数要求至少有一个为double型,且该方法的返回值也为double型。所以在计算中需要不停的进行int和double类型间的强制转换。十分麻烦且容易出错。

对于当x<0时返回均是false的情况是通过尝试得出的结论。第一次提交的时候,对x进行了正负数判断,当x为负数的时候取x的绝对值进行判断,但是提交后提示错误。 另外要注意的一点是,去掉首尾之后,结果与处理前减少了两个数量级,所以判断的时候count值应逐次除掉100而不是10。

转载请注明原文地址: https://www.6miu.com/read-57390.html

最新回复(0)