package com.hitsys.bayonet.action;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
* 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
* 示例 1: 示例 2: 示例 3:
输入:x = 121 输入:x = -121 输入:x = 10
输出:true 输出:false 输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 解释:从右向左读, 为 01 。因此它不是一个回文数。
* @author james
*
*/
public class Test
{
public static void main(String[] args)
{
boolean palindrome1 = isPalindrome1(1001);
System.out.println(palindrome1);
boolean palindrome = isPalindrome(10200201);
System.out.println(palindrome);
}
}
(1)第一种解法
public static boolean isPalindrome1(int x)
{
int a = 0;
int c = x;
//当 x 对 10取余=0的时候肯定不是回文数 比如:100 排除特殊情况 0
if(x % 10 == 0 && x != 0)
{
return false;
}
//排除 x<0 的情况
while (x>0)
{
//通过对10取余拿到个位上的值
int b = x % 10;
/**
* 每次让 a 的值 扩大10 倍再加上个位的值
* 刚好把数字从个位数往前颠倒过来
**/
a = a * 10 + b;
/*
* 因为int是整数类型
* 所以可以去掉已经获取到的个位数
* 下一次取个位数 就是取这一次的十位数
* */
x = x / 10;
}
//再次判断 a的值是否与 传进来的值相等
if(c == a)
{
return true;
}
return false;
}
(2)第二种解法(效率比较低仅作参考)
public static boolean isPalindrome(int x) {
//当 x 对 10取余=0的时候肯定不是回文数 比如:100 排除特殊情况 0
if(x%10 ==0 && x!=0)
{
return false;
}
//把 int 转换为 string类型
String a = String.valueOf(x);
//把string类型转换为数组 并添加到list集合里边去
List<String> d = Arrays.asList(a.split(""));
/**
* java.util.Arrays
* 不转换为java.util.List<String>
* 会报错:java.lang.UnsupportedOperationException
* 具体原因往下看
*/
List<String> b= new ArrayList<String>(d);
//创建一个长度为c的数组 便于根据下标去放数据
String [] c=new String[b.size()];
StringBuffer s=new StringBuffer();
//获取 b里面最后一位数
String string = b.get(b.size()-1).toString();
//判断传进来的数字第一位和最后一位是否相等 不相等直接false
if(b.get(0).equals(string))
{
//for 循环不设置i自增 设置 i =0
for (int i = 0; i <= b.size()-1; )
{
//不停的获取 b里面的第一位数字 并把他的值给 c的最后一位
c[b.size()-1]=b.get(i).toString();
//删除已经添加的元素
b.remove(i);
}
//循环把 结果里面的值拼接为一个字符串
for (int i = 0; i < c.length; i++)
{
s.append(c[i]);
}
//判断两个字符串是否相等
if(s.toString().equals(a))
{
return true;
}
}
return false;
}
java.lang.UnsupportedOperationException异常原因及解决方案:
这个异常是写上边第二种解法时候遇到的,记录一下。
(1)异常原因:
点进去之后发现java.util.Arrays里面的asList,返回的是一个ArrayList,而ArrayList又继承了AbstractList方法。
AbstractList里面的add、remove方法是默认抛出 java.lang.UnsupportedOperationException异常。
(2)解决方案:
java.util.ArrayList重写了父类AbstractList的add、remove方法。
public class ListTest {
public static void main(String[] args) {
String[] array = {"6","8","24"};
List<String> list = Arrays.asList(array);
List arrList = new ArrayList(list);
arrList.add("9");
}
}
文章仅用作分享记录,如有不当之处,还望指正。