学习
实践
活动
专区
工具
TVP
写文章

2.颠倒整数&回文数

【题号7】 颠倒整数

题目描述:

给定一个范围为 32 位 int 的整数,将其颠倒。

例 1:

输入:123

输出:321

例 2:

输入:-123

输出:-321

例 3:

输入:120

输出:21

注意:

假设我们的环境只能处理 32 位 int 范围内的整数。根据这个假设,如果颠倒后的结果超过这个范围,则返回 0。

解题思路:

符号单独处理(统一为非负整数进行计算,最后再还原正负号);

除10取余,用一个数组保存余数(如数字321,保存为数组arr=[1,2,3]);

将余数数组处理还原为倒序后的数字(3+2*10+1*100)。

代码实现:

class Solution {

public:

int reverse(int x) {

vector arr;

int flag=0,y=0;

// 将x统一化为非负数,用flag作为标记,以便最后还原

flag=1;

else x=-x;

while(x!=0){

// 对x进行除10取余,将数字倒序保存到数组中

arr.push_back(x%10);

x=x/10;

}

//将数组还原成一个整数

for(int i=arr.size()-1,j=0;i>=0;i--,j++){

y+=arr[i]*pow(10,j);

if(y

}

//还原正负号

if(flag==0){

y=-y;

}

return y;

}

};

【题号9】回文数

题目描述:

一些提示:

负整数可以是回文数吗?(例如 -1)

如果你打算把整数转为字符串,请注意不允许使用辅助空间的限制。

你也可以考虑将数字颠倒。但是如果你已经解决了 “颠倒整数” 问题的话,就会注意到颠倒整数时可能会发生溢出。你怎么来解决这个问题呢?

本题有一种比较通用的解决方式。

解题思路:

负数不是回文数;

将数字转换为字符串,对字符串的头和尾依次向内比较(如”1234”,依次比较’1’’4’、’2’'3’);

当出现不等的情况,立即返回false(如比较到’1’’4’不等立即返回);

若直到遍历结束后都未返回,则该数字是回文数,返回true。

注:本题提示不允许使用辅助空间的限制,不是很理解。用字符串可以避开整数溢出的问题。以下代码已通过测试用例,但可能不符合要求。

代码实现

class Solution {

public:

bool isPalindrome(int x) {

return false;

}else{

string s = to_string(x);

for(int i=0;i

if(s[i]!=s[s.length()-1-i]){

return false;

}

}

return true;

}

}

};

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180330G1DYWO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券