版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011732358/article/details/85042046
Math
leetcode7. Reverse Integer
Easy题目
题目链接
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
思路:用while循环,对数不断取余就行,然后生成新数,只需要注意下 不要越界即可
class Solution {
public int reverse(int x) {
int ans = 0;
while(x != 0){
if(Math.abs(ans) > 214748364){
return 0;
}
ans = ans * 10 + x % 10;
x = x / 10;
}
return ans;
}
}
leetcode66. Plus One
题目链接
题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
思路:从后向前遍历,用flag作为进位标志位,并且初始化为1。最后一位数字加一后,若大于9 则 flag=1;否则 flag = 0,并跳出循环。若flag为0,说明该数字总位数未变,直接返回digits,否则说明该数字总位数增1,则需要新建数组,并首位置1。
class Solution {
public int[] plusOne(int[] digits) {
int len = digits.length;
int flag = 1;//进位标志位
for(int i = len - 1; i >=0; i--){
if(digits[i] + flag > 9){
digits[i] = 0;
flag = 1;
}else{
digits[i]++;
flag = 0;
break;
}
}
if(flag != 0){
int[] ans = new int[len + 1];
ans[0] = 1;
return ans;
}
return digits;
}
}
leetcode9. Palindrome Number
题目链接
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
思路:用数组把数字的各位记录下来,然后比较各位是否符合要求,很暴力
public boolean isPalindrome(int x) {
if(x < 0){
return false;
}
int digits[] = new int[30];
int i = 0;
while(x != 0){
digits[i] = x % 10;
i++;
x /= 10;
}
for(int j = 0; j < i / 2; j++){
if(digits[j] != digits[i - j - 1]){
return false;
}
}
return true;
}
别人思路:分别找出数字的第一位和最后一位进行比较,然后如果两者相等,则把原数去除这两位,继续上述操作。
class Solution {
public boolean isPalindrome(int x) {
if(x < 0){
return false;
}
int div = 1;
int l, r;
while(x / div > 9){
div *= 10;
}
while(x != 0){
l = x / div;//记录首位
r = x % 10;//记录末位
if(l != r){
return false;
}
x = x % div / 10;
//去除首部和尾部
div /= 100;
}
return true;
}
}