回文数
回文数的定义就是正向读与反向读都是一样的,比如: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的子串
方法三:分治:先将数组二分,再对每一个子数组二分,再对每一个数组再二分(这里可以用递归),直到分到每个元素为一个子数组,然后求两个元素的公共前缀,再向上层递归,再求第二层的公共前缀。
今天就到这里哈,咱明儿见!