题目
实现一个 36 进制的加法 0-9 a-z。
示例
输入:[“abbbb”,“1”],输出:“abbbc”
思路
从个位数开始分别遍历,转换为整数相加,之后再转换为字符串即可。
代码
func addString(str1, str2 string) string {
if str1 == "" || str2 == "" {
return str1 + str2
}
// 36位字符数组
// 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
hash := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
// 循环遍历两字符串,然后转换为整型相加
res := ""
i, j := len(str1)-1, len(str2)-1
carry := 0
for ; i >=0 || j >= 0 || carry > 0; i,j = i-1,j-1 {
// 将字符转换为整型
sum, num1, num2 := 0, 0, 0
if i >= 0 {
num1 = getInt(str1[i])
}
if j >= 0 {
num2 = getInt(str2[j])
}
// 相加,同时将结果加入到字符串里
sum = num1 + num2 + carry
carry = sum / 36
res = hash[sum % 36] + res
}
return res
}
// 将字符转换为整型
func getInt(x byte) int {
// 判断是'0-9'还是'a-z'
if x - '0' >= 0 && x - '0' <= 9 {
return int(x - '0')
}
return int(x - 'a' + 10)
}
复杂度分析
时间复杂度:O(max(N,M))。N,M为str1,str2的字符长度。
空间复杂度:O(1)。