记录腾讯的一面算法题

腾讯的一面算法题:
记录下
题目:给定两个超大的数字,超过了int的范围,用字符串表示,请把他们相加后用字符串返回。
一:分析
题目给我们两个字符串表示的数字,超过了Integer的范围,所以我们不能单纯的用Integer去相加了。
我们可以把字符串拆开,从个位开始去相加,有进位的就往前进一位相加。用StringBuilder去添加每次相加的数。最后再返回StringBuilder的反转。

二:代码实现
在面试的时候呢,不仅仅只能考虑实现算法,面试官可能还会看你对边界情况的考虑,和代码的可阅读性等。在写的时候可以先说思路,边写边和面试官交流,写一手清晰的代码也会让面试官心动呢,

private fun addBigInteger(strOne: String?, strTwo: String?): String? {
    val builder = StringBuilder()
    //边界情况
    if (strOne.isNullOrEmpty()) {
        return strTwo
    }
    if (strTwo.isNullOrEmpty()) {
        return strOne
    }
    //第一个比第二个小的情况 调换
    if (strOne.length < strTwo.length) {
        return addBigInteger(strTwo, strOne)
    }
    val oneChars = strOne.toCharArray()
    val twoChars = strTwo.toCharArray()
    val step = oneChars.size - twoChars.size
    var prefix = 0
    for (index in (oneChars.size - 1).downTo(0)) {
        val charOne = oneChars[index]
        var charTwo = '0'
        if (index - step >= 0) {
            charTwo = twoChars[index - step]
        }
        val sum = charOne.toString().toInt() + charTwo.toString().toInt() + prefix
        //进位记录
        prefix = sum / 10
        //添加个位
        builder.append(sum % 10)
    }
    if (prefix > 0){
        builder.append(prefix)
    }
    return builder.reverse().toString()
}

三:测试用例

fun main() {
    println(addBigInteger("66","66"))
}

进位的情况,如 66 + 66
第一个比第二个的位数小的情况 如 66+1234
第一个比第二个的位数多的情况 如 1234+66

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值