LeetCode刷题笔记--NO.2 回文数
回文数
题目:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1
进阶:你能不将整数转为字符串来解决这个问题吗?
方法一 数字反转
思路:根据题目回文数的定义,考虑回文数为非负数,负数直接输出false。若为非负数,将输入的数字进行反转存储再与原始数进行比较,两者相等则返回true,此数即为回文数。
Java:
class Solution {
public boolean isPalindrome(int x) {
// 如果 x 是负数,则它不是回文数
if(x < 0){
return false;
}
int sum = 0; // 用于存储反转后的数字
int origin = x; // 保存原始值以进行比较
while(x > 0){
sum = sum * 10 + x % 10; // 反转数字
x /= 10; // 去掉最后一位数字
}
// 比较反转后的数字和原始值
if(sum == origin){
return true;
}
else{
return false;
}
}
}
Go:
import "fmt"
func isPalindrome(x int) bool {
// 如果 x 是负数,则它不是回文数
if x < 0 {
return false
}
sum := 0 // 用于存储反转后的数字
origin := x // 保存原始值以进行比较
for x > 0 {
sum = sum * 10 + x % 10 // 反转数字
x /= 10 // 去掉最后一位数字
}
// 比较反转后的数字和原始值
return sum == origin
}
方法二 部分反转
思路:反转整个数若输入的数长度很长会导致复杂度变高,可以优化成只反转前半部分或者后半部分,反转后的部分数字进行存储,检查原始数字的前半部分和反转后的数字的后半部分是否相等,两者相等则返回true,此数即为回文数。
Java:
class Solution {
public boolean isPalindrome(int x) {
// 如果 x 是负数或者以 0 结尾且不等于 0,则它不是回文数
if(x < 0 || (x % 10 == 0 && x != 0)){
return false;
}
int num = 0; // 用于存储反转一半后的数字
// 反转一半数字的过程
while(x > num){
num = num * 10 + x % 10; // 反转 x 的最后一位数字并将其加到 num
x = x / 10; // 去掉 x 的最后一位数字
}
// 检查原始数字的前半部分和反转后数字的后半部分是否相等
return x == num || x == (num / 10); // 适用于数字长度为奇数的情况
}
}
Go:
import "fmt"
func isPalindrome(x int) bool {
// 如果 x 是负数或者以 0 结尾且不等于 0,则它不是回文数
if x < 0 || (x % 10 == 0 && x != 0) {
return false
}
num := 0 // 用于存储反转一半后的数字
// 反转一半数字的过程
for x > num {
num = num * 10 + x % 10 // 反转 x 的最后一位数字并将其加到 num
x /= 10 // 去掉 x 的最后一位数字
}
// 检查原始数字的前半部分和反转后数字的后半部分是否相等
return x == num || x == num / 10 // 适用于数字长度为奇数的情况
}
方法三 Java自带方法
思路:使用Java的自带方法,把整数转为字符串,再反转字符串,比较原字符串和反转后的字符串是否相等,若相等则返回true,此数即为回文数。
import java.util.*;
class Solution {
public boolean isPalindrome(int x) {
// 将整数转换为字符串
String str = String.valueOf(x);
// 反转字符串
String stri = new StringBuffer(str).reverse().toString();
// 比较原字符串和反转后的字符串是否相等
return str.equals(stri);
}
}
参考:
https://leetcode.cn/problems/palindrome-number/description/
https://blog.csdn.net/qwerty200696/article/details/79053770
https://blog.csdn.net/m0_56636447/category_12077252.html
https://blog.csdn.net/a1111116/article/details/122657270