算法题面试实战收集

  1. 回文数字 2023-08-18 美团 一面

在不使用额外的内存空间的条件下判断一个整数是否是回文。
回文指逆序和正序完全相同。
数据范围:在这里插入图片描述

进阶: 空间复杂度O(1) ,时间复杂度 O(n)
提示:
负整数可以是回文吗?(比如-1)
如果你在考虑将数字转化为字符串的话,请注意一下不能使用额外空间的限制
你可以将整数翻转。但是,如果你做过题目“反转数字”,你会知道将整数翻转可能会出现溢出的情况,你怎么处理这个问题?

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param x int整型 
     * @return bool布尔型
     */
    //1. 负整数在这道题里不算是回文,比如-121!=121-
    //方案一:121%10=1,121/100=1
    public boolean isPalindrome (int x) {
//         if (x<0) return false;
//         String str = x + "";
//         int len = str.length();
//         if (len==1){
//             return true;
//         }
        
//         int mid = len/2;
//         int p=0;
//         for (int i=1;i<=mid;i++){
//             int temp = x%10;
//         		System.out.println("temp="+temp);
//             p=p*10 + temp;
//             x = x/10;
//         }
//         if (x == p){
//             return true;
//         }
//         return false;
        
        int y = 0;
        int a = x;
        while (a>0){
           y  = y * 10 + (a%10);
           a = a/10;
        }
        return y == x;
    }
}

上面的被注释的代码才是本人所写,当然,一开始说需要O(logn)的时间复杂度,所以想到要二分,求得了x的位数长度。然后是判断负数是否是回文,题目认为不是,所以有了判断为负就直接返回false;所以整体写的略微复杂了。后面的结果是面试官给出的答案,是比较美观、简洁的代码,思路很清晰。
当然,这道题其实有几个特点:首先他不是回文字符串,而是数字,数字类问题意味着我们可以做加减乘除、位运算等,也就是说我们没必要转成字符串然后判断回文,可以利用数字的特性通过多次取模乘10这样来反转数字。所以这是这道算法题希望考察到的点。

你可能感兴趣的:(算法,面试,java)