1. 两数之和
在哈希表中查找时间复杂度总体O(N),对单独的值可以缩小至O(1)。
Java提供的hashmap
数据结构可以快速的完成目标。将每个值作为key,将对应下标作为value,可迅速地判断是否含有需要的key,并迅速地返回这个key在原数组中的下标。
对于不用hashmap只能使用暴力解法,注意下标的保存。
2.回文数
有很多解法,将原数翻转后与原数对比、将原数后半翻转与前半判断等。
常用数字法。找出原数位数(如原数为1234,位数就为1000)。原数除以位数,向下取整,可得最高位上数字。原数对10取余可得最低位上数字。
原数除以10(向下取整),对位数取余,可去头去尾保留中间。
注意原数少了两位,故位数在每一次循环最后都要除以100。
3. 最后一个单词的长度
Java的String类有length、trim、charAt
方法可以使用。倒过来扫描就行。
4.二进制求和
多种方法,但用到基本数字类型时需要注意肯定会有溢出!建议使用高精度类型或者使用朴素法。
注:另有位运算。
- 如果字符串超过 333333 位,不能转化为 Integer
- 如果字符串超过 656565 位,不能转化为 Long
- 如果字符串超过500000001位,不能转化为 BigInteger
Integer.parseInt(a,b)
表示将字符串a以b进制的形式转换成Integer类型。
Integer.toBinaryString()
表示将二进制的Integer类型转换成String类型(保留二进制形式)。
4.1模拟真实的二进制相加
Math.max
取出两String的长度最大值n。从低位开始扫描,扫描n次,判断相加后的值和是否有进位(设置一个标识符存储上一位相加后是否有进位)。相加后的值可以存放在新的字符串中,使用append
方法将每一个新的数字放在字符串尾部。
循环结束后进位标识符若不为0,则添加在String尾部加1。
最后return时一定要记得反转字符串(使用reverse
方法)