标签:10 return Day03.9 int rev revertedNumber 刷题 回文
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
我的思路:
如果x<0,带负号直接就判false,x=0是回文数,判true;
如果x>0,再继续判断:
以第七题的思路,将int型数字反转,如果反转的数等于原数即是回文数。这里面有一个坑在于,如果给你998765432这样的测试用例,反转后的数会溢出int型报错,所以要加个判断条件。
class Solution { public: bool isPalindrome(int x) { if (x < 0) return false; else if (x == 0) return true; else { int x1 = x; int rev = 0; while (x != 0) { int digit = x % 10; if (rev > INT_MAX / 10 || (rev == INT_MAX / 10 && digit > 7)) { return false; } x /= 10; rev = rev * 10 + digit; } if (rev == x1) return true; else return false; } } }; int main() { int num1 = 121; int num2 = -121; int num3 = 10; int num4 = 998765432; Solution sol; cout << sol.isPalindrome(num1) << endl; cout << sol.isPalindrome(num2) << endl; cout << sol.isPalindrome(num3) << endl; cout << sol.isPalindrome(num4) << endl; system("pause"); return 0; }执行用时:8 ms, 在所有 C++ 提交中击败了84.22%的用户 内存消耗:5.7 MB, 在所有 C++ 提交中击败了94.51%的用户
答案思路:
class Solution { public: bool isPalindrome(int x) { // 特殊情况: // 如上所述,当 x < 0 时,x 不是回文数。 // 同样地,如果数字的最后一位是 0,为了使该数字为回文, // 则其第一位数字也应该是 0 // 只有 0 满足这一属性 if (x < 0 || (x % 10 == 0 && x != 0)) { return false; } int revertedNumber = 0; while (x > revertedNumber) { revertedNumber = revertedNumber * 10 + x % 10; x /= 10; } // 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。 // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123, // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。 return x == revertedNumber || x == revertedNumber / 10; } };
标签:10,return,Day03.9,int,rev,revertedNumber,刷题,回文 来源: https://www.cnblogs.com/ayuanstudy/p/15671178.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。