【题号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;
}
}
};
领取专属 10元无门槛券
私享最新 技术干货