天天看点

回文数

回文数定义

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。

例如,若n=1234321,则称n为一回文数,同理,124421也是回文数。

算法:

  //是否是回文数   12321 true;  12344 false;
1、常见的判断一个数为回文数的算法一般需要把一个数转为字符串形式,后从两边开始按下标读取每个数字并比较两个数字是否相同。

  public static boolean isPalindrome(int x){
      
    if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }      
    char[] array = String.valueOf(x).toCharArray();

    int left = 0; right = array.length-1;      
    while (left < right) {
         if (array[left] != array[right]) {
            return false; 
        } 

             left++; right--; 
     }
      
        return true;
    }

2、将int的字符串翻转,然后判断翻转后的字符串和原串是否相等。

  public static boolean isP2(int x){
      
     if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }      
     char[] charArray = String.valueOf(x).toCharArray();
        String str = "";
        for(int i = charArray.length-1; i >= 0; i--){
            str = str + String.valueOf(charArray[i]);
            System.out.println(str);
        }
        if(str.equals(String.valueOf(x))){
            return true;
        }else{
            return false;
        }
    }

3、算法基于int不需要完整遍历这个数一次。其思路为:假设需要判断的数为x,用一个名为back的数储存x后半段的数并且翻转,
最后再比较x的前半段与后半段back是否相等即可。

    public static boolean isP3(int x){
        if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        int back = 0;
        while(x > back) {
            back = back * 10 + x % 10;
            x  = x / 10;
        }
        if(x == back || x == back/10){
            return true;
        }else{
            return false;
        }
    }