7. 整数反转
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
public class Solution {
public int reverse(int x) {
long z = x;
String str = String.valueOf(Math.abs(z));
StringBuilder conStr = new StringBuilder();
int len = str.length();
while (len > 0) {
conStr.append(str.charAt(len - 1));
len--;
}
Long l = Long.parseLong(conStr.toString());
if (l > Integer.MAX_VALUE) {
return 0;
}
if (x >= 0) {
return l.intValue();
} else {
return -l.intValue();
}
}
}
9. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
public class Solution {
/*
方法1:普通解法(反转字符串)
直接转变成字符串s,反转s得到s1,判断是否相等;
*/
public boolean isPalindrome(int x) {
String s = Integer.toString(x);
String s1 = new StringBuffer(s).reverse().toString();
if (s.equals(s1)) return true;
return false;
}
/*
方法2:进阶解法(数学方法)
通过取整和取余操作获取整数中对应的数字进行比较
举个例子:1221 这个数字
通过计算 1221 / 1000, 得首位1
通过计算 1221 % 10, 可得末位 1
进行比较
再将 22 取出来继续比较
*/
public boolean isPalindrome1(int x) {
//边界判断
if (x < 0) return false;
int div = 1; //作用:获取最高位
while (x / div >= 10) div *= 10;
while (x > 0) {
int left = x / div;
int right = x % 10;
if (left != right) return false;
x = (x % div) / 10;
div /= 100;
}
return true;
}
/*
方法3:进阶解法(数字巧妙处理)
利用回文数的规律,将数字进行对折后看能否一一对应。
注意:
回文数的位数可奇可偶,当它的长度是偶数时,它对折过来应该是相等的;
当它的长度是奇数时,那么它对折过来后,有一个的长度需要去掉一位数(除以 10 并取整)。
*/
public boolean isPalindrome2(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) { //负数或者末尾为零的正数
return false;
}
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
return x == revertedNumber || x == revertedNumber / 10;
}
}
136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
public class Solution {
//思路:
//使用异或运算符(异或运算符是把两个数转换成为二进制,然后进行每一位进行异或操作,相同为0,不同为1)
public int singleNumber(int[] nums) {
int num = 0;
for(int i = 0; i < nums.length; i++) {
num ^= nums[i];
}
return num;
}
}