记录腾讯的一面算法题
程序员文章站
2024-01-01 11:34:52
腾讯的一面算法题:记录下题目:给定两个超大的数字,超过了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