欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

记录腾讯的一面算法题

程序员文章站 2022-03-23 11:29:54
腾讯的一面算法题:记录下题目:给定两个超大的数字,超过了int的范围,用字符串表示,请把他们相加后用字符串返回。一:分析题目给我们两个字符串表示的数字,超过了Integer的范围,所以我们不能单纯的用Integer去相加了。我们可以把字符串拆开,从个位开始去相加,有进位的就往前进一位相加。用StringBuilder去添加每次相加的数。最后再返回StringBuilder的反转。二:代码实现在面试的时候呢,不仅仅只能考虑实现算法,面试官可能还会看你对边界情况的考虑,和代码的可阅读性等。在写的时...

腾讯的一面算法题:
记录下
题目:给定两个超大的数字,超过了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

本文地址:https://blog.csdn.net/lyjSmile/article/details/107334164