在刷leetcode简单题中遇到问题与见到的思路(JAVA),第一篇

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方法)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值