1、整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
int reverse(int x){
int max = 0x7fffffff;//32位最大整数
int min = 0x80000000;//32位最小正数
long res = 0;//用long来判断溢出
while(x){//正负数统一考虑
res =res*10 + x%10;
x /= 10;//去掉x的最后一位
}
return res>max||res<min?0:res;
}
积累:int类型的最大正数:0x7fffffff;
int类型的最小负数:0x80000000;
2、反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[]
的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"]
示例 2:
输入:["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"]
void reverse(char *s,int size){
for(int i=size-1;i>=size/2;i--){//每循环一次翻转两个对称的字符 因此 只需要循环一班长度即可 否则又会全部翻转回来
int temp = s[i];
s[i] = s[size-1-i];
s[size-1-i] = temp;
}
}