[七日打卡]之第二卡:回文数、罗马数字、最长公共前缀

450 阅读2分钟

回文数

回文数的定义就是正向读与反向读都是一样的,比如:121、12321、1221、345543,第一反应是转成字符串,然后截取、反转、对比,我是不是没救了。。。

首先排除哪些数字不是回文数:

1、负数肯定不是。

2、末尾是0的肯定不是。

比较方法,可以参考整数反转的部分算法,反转X,当反转到一半的时候,也就是result <= x的情况下,比较两个数是否相等。


罗马数字

看了大佬的解法,核心是:

左边数字小于右边数字,减去左边数字。

左边数字大于等于右边数字,加上左边数字。

最后一位直接加上即可。

对于文中的I、V、X、L、C、D、M可以使用switch返回对应的数字。


最长公共前缀

方法一:横向对比:用一个变量表示目前N个元素公共前缀,如先对比第0个和第1个元素,找出公共部分。然后比较公共部分与第二个元素,找出公共部分,然后比较公共部分与第三个元素,以此类推。

那么如何找公共部分呢?比较str.charAt(i)即可。

方法二:纵向对比,先对比第一列,然后比较第二列,如果此时第二列有不相同的字符,返回0至当前index的子串

方法三:分治:先将数组二分,再对每一个子数组二分,再对每一个数组再二分(这里可以用递归),直到分到每个元素为一个子数组,然后求两个元素的公共前缀,再向上层递归,再求第二层的公共前缀。

今天就到这里哈,咱明儿见!