36进制加法实现------go

36进制加法实现----go

题目

实现一个 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)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值