• 回文数-算法详细分析


    题目:回文数

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

    示例 1:

        输入: 121
        输出: true
    

    示例 2:

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

    示例 3:

        输入: 10
        输出: false
        解释: 从右向左读, 为 01 。因此它不是一个回文数。
    
     package com.test.day6_10;
     
     /**
     
      * @author cosefy
      * @date 2020/6/10
      * */
        public class IsPalindrome {
        	public static void main(String[] args) {
            int x = 12321;
            System.out.println(isPalindrome_Test1(x));
            System.out.println(isPalindrome_Test2(x));
        }
    
    解法一:翻转整数

    思路:翻转整数,然后翻转后的数和原整数比较。
    分析:时间复杂度O(logn),空间复杂度O(1)
    问题:可能会遇到翻转后,整数溢出的问题,所以将翻转后的类型定义为long.
    考虑:思考改进的方法,比如只翻转一半。

    public static boolean isPalindrome_Test1(int x) {
        long result = 0;
        if (x < 0 || (x % 10 == 0 && x != 0))
            return false;
        else {
            int x1 = x;
            while (x1 != 0) {
                result = result * 10 + x1 % 10;
                x1 = x1 / 10;
            }
        }
        return result == x;
    }
    
    解法二:翻转部分整数(改进)

    思路:翻转后半部分整数,然后和前半部分比较
    分析:时间复杂度O(logn),空间复杂度O(1)
    易错点:
    -注意跳出循环条件,翻转后的数字大于等于改变后的原数字就会跳出循环
    -如果数字为奇数,如12321,那么reverseNum=123,x=12,需要让reverseNum/10

    public static boolean isPalindrome_Test2(int x) {
        if (x == 0)
            return true;
        if (x < 0 || x % 10 == 0)
            return false;
    
    ​    int reverseNum = 0;
    ​    while (reverseNum < x) {
    ​        reverseNum = reverseNum * 10 + x % 10;
    ​        x = x / 10;
    ​    }
    ​    return x == reverseNum || x == reverseNum / 10;
    }
    }
    
  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/cosefy/p/13087752.html
Copyright © 2020-2023  润新知