您的位置 首页 java

互联网算法面试之回文数?如何解决回文数相关算法题

什么是回文数

互联网算法面试之回文数?如何解决回文数相关算法题

回文数的来源,其实在咱们中国古诗中就有 回文诗 一说。比如“客上天然居,居然天上客”,“还有灵山大佛,佛大山灵”。还有就是我们经常会看见一些俗语,比如“上海自来水来自海上”、“山西悬空寺空悬西山”、“山东落花生花落东山”等等,你还知道哪些回文诗或者俗语嘛?

那在咱们算法面试题中,如何判断一个数或者一个字符串是回文数呢?顾名思义,回文数即一个数字,正着读,倒着读都是一个数字。比如123454321,这个数反过来还是123454321。比如字符串abcdcba,倒过来也是一样的abcdcba。一个字符的回文数就是它本身。

简单算法面试题之判定一个整数是否为回文数

比如,任意给定一个整数nums。判断nums是否为回文数。

当我们知道了回文数的特征之后,我们才能够解决问题,找出规律,不然你都不知道什么是回文数,如何来解决面试问题呢?

首先,我们需要审题,任意整数。那么我们回顾数学知识,什么是整数?整数包含了负数、零、正数。我们先来分析特殊情况。

1.当nums为负数的时候,比如nums= -202。那么-202的回文数是202-。因此-202不是一个回文数,这个时候我们会发现一个特点,那就是小于零的所有负数,均不会是回文数。因为负数的回文数最后一位一定是“-”。因此,我们可以在代码中先解决负数问题。

 int nums=“任意数”;
if(nums<0)return false;  

2.当任意数为0的时候,那么0肯定是回文数,因此我们也可以在代码中将这一特征值先给出答案。它一定是回文数

 int nums=“任意数”;
if(nums==0)return true;  

3.当一个整数以0结尾的特殊情况,比如2200,那么它的回文数就是0022,因为一个整数不可能以“0”开始,但是这里有一个特殊情况,就是如果这个数本身就是0的时候,他的回文数就是0,因此我们也可以将这种情况排除

 int nums=“任意数”;
if(nums % 10 == 0 &&nums != 0)return false;  

4.当我们解决了三种特殊情况后,剩下的就是非0结尾的正整数了,因此我们就可以考虑使用算法来解决问题。

根据回文数的特征,比如1234321这个整数。我们会发现前半段123等于后半段321的倒序,那么我们如何实现这个算法呢?请看如下代码。我在代码中做注解

     /**
     * 数学取巧算法
     * 后半取出段数字进行翻转
     * @param x
     * @return
     */    public static boolean isPalindrome(int nums) {
      //这个条件判断就综合了上面的1,3中情况,分别是负数和以0结尾的整数
      //他们就肯定不是回文数
        if (nums < 0 || (nums % 10 == 0 &&nums != 0)) return false;
      //我们定义个取一半的数字,因为按照上面的思路。
      //最终revertedNumber需要与nums做比较。所以,初始化为0
        int revertedNumber = 0;
      //while条件判断
        while (nums> revertedNumber) {
          //获取nums的后半段数字,每一次循环增加一位。
          //比如nums为252
          //第一次循环结束,revertedNumber的值是2,nums是25
          //第二次循环结束,revertedNumber的值是25,nums是2
          //由于nums<revertedNumber的值,因此while循环终止
            revertedNumber = revertedNumber * 10 + nums% 10;
          //下面的写法等同于nums=nums/10
            nums /= 10;
        }
      //当nums的长度为偶数个数时,比较前面;为奇数个数是比较后面
        return nums == revertedNumber || nums == revertedNumber / 10;
    }  

简单算法面试之判断一个字符串是否是回文字符串

上面的是判断一个数字是否是回文数,上面的数学算法是比较快速的一种算法,那么还有一种转换为字符串的方法,这个方法呢适用于判断一个字符串是不是回文字符串。比如“abcba”。思路就是直接使用倒序方法,然后将倒序后的字符串进行比较,如果相等则是回文字符串,如果不相等则不是回文字符串。 JAVA 代码如下;

     /**
     * 字符串算法
     * 思想:字符串反转比较是否相等
     * @param x
     * @return
     */    
public static boolean isPalindromeOne(int x) {
  //构造一个新的字符串,然后倒序。与原数字或字符串比较
        String  reverse dStr = (new StringBuilder(x + "")).reverse(). toString ();
        return (x + "").equals(reversedStr);
    }  

算法结果时间比较

通过咱们上面简单的时间统计发现,当判断一个整数是否为回文数的时候,我们发现数学算法比字符串算法快的非常多。所以,想要在面试中脱颖而出,那么我们需要掌握不同的解题思路,当然如果你能够最终得到正确的答案,那么证明了你的思路还是对的,只是需要进行优化。

结语:

在当前互联网面试过程中,算法面试是很重要的一环,很多公司甚至于只给一道算法题,如果你通过了,你才有机会进行下一轮的面试。好了,大家如果对算法感兴趣可以关注我的头条号,可以看算法视频讲解,简单,中等,困难的都有。并且每一道面试题都会给出至少两种解决方案。最后,祝各位在金三银四的找工作黄金期间,找到自己的心仪的归宿。

我是蜜蜂,关注我,跟我一起学算法吧!

文章来源:智云一二三科技

文章标题:互联网算法面试之回文数?如何解决回文数相关算法题

文章地址:https://www.zhihuclub.com/177051.shtml

关于作者: 智云科技

热门文章

网站地图