当前位置: 代码迷 >> 综合 >> 20200119:(leetcode)回文数(3种解法)
  详细解决方案

20200119:(leetcode)回文数(3种解法)

热度:74   发布时间:2024-01-26 07:23:53.0

回文数

  • 题目
  • 基本思路
  • 代码实现

题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

基本思路

  1. 方法一:转化为字符串,然后直接反转对比原始字符串和反转后的字符串
  2. 方法二:长度为n的字符串,取出索引为0和n-1,1和n-2 …的索引对应的数字对比,不同则返回false。
  3. 方法三:题解提供的最简单方法,直接取后半段的数字反转后与前半段对比,关键部分在于判断截取下来的部分是否已经截取过半,因此需要判断截取后的数字与前半段数字的大小关系。

代码实现

方法一二

package com.immunize.leetcode.isPalindrome1;/*** 方法二* * @author Mr IMMUNIZE**/
public class Solution {public boolean isPalindrome(int x) {/** 方法一:* * return (x + "").equals((new StringBuilder(x + "")).reverse().toString());*/if (x < 0)return false;// 获取当前x的位数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;// 去掉最高位和最低位后的xx = (x % div) / 10;// 因为去掉了2位数,所以被除数div也要少2位div /= 100;}return true;}
}

方法三

package com.immunize.leetcode.isPalindrome1;/*** 方法三:* * @author Mr IMMUNIZE**/
public class Solution {public boolean isPalindrome(int x) {if (x < 0 || (x % 10 == 0 && x != 0))return false;int Rx = 0;// x每次去除最低位while (x > Rx) {Rx = Rx * 10 + x % 10;x /= 10;}// 偶数则相等,奇数x则等于截取数字去掉最后一位。return x == Rx || x == Rx / 10;}
}