LeetCode-补充题9. 36进制加法

题目来源

题目详情

36进制由0-9,a-z,共36个字符表示。

要求按照加法规则计算出任意两个36进制正整数的和,如1b + 2x = 48 (解释:47+105=152)

要求:不允许使用先将36进制数字整体转为10进制,相加后再转回为36进制的做法

相似题目

题解分析

此题难度倒不是很大,实际上是LC415. 字符串相加的扩展。LC415是十进制的大数相加,而本题是36进制的大数相加。

字符串相加是有模板的,通过同时将n,m和进位carry放入边界中进行考虑可以很好地解决这类问题,本题也是一样。

这道题目的一个细节就是需要对36进制进行转换,这需要额外编写两个函数来实现进制与字母之间的转换。

package com.walegarrett.programming;

/**
 * @Author WaleGarrett
 * @Date 2022/4/1 16:29
 */

import org.junit.Test;

/**
 * 题目描述:
 *
 * 36进制由0-9,a-z,共36个字符表示。
 * 要求按照加法规则计算出任意两个36进制正整数的和,如1b + 2x = 48  (解释:47+105=152)
 * 要求:不允许使用先将36进制数字整体转为10进制,相加后再转回为36进制的做法
 */
public class Addition_9 {
    public String add36String(String num1, String num2){
        int n = num1.length() - 1;
        int m = num2.length() - 1;
        int carry = 0;
        StringBuilder sb = new StringBuilder();
        while(n >= 0 || m >= 0 || carry > 0){
            int a = n >= 0 ? getInt(num1.charAt(n)) : 0;
            int b = m >= 0 ? getInt(num2.charAt(m)) : 0;
            int sum = a + b + carry;
            carry = sum / 36;
            sb.append(toChar(sum % 36));
            n--;
            m--;
        }
        return sb.reverse().toString();
    }

    private int getInt(char ch){
        if(Character.isDigit(ch)){
            return ch - '0';
        }else if(Character.isLetter(ch)){
            ch = Character.toLowerCase(ch);
            return 10 + ch - 'a';
        }
        return 0;
    }

    private char toChar(int num){
        if(num >= 0 && num < 10){
            return (char) (num + '0');
        }else if(num >= 10 && num < 36){
            return (char) (num - 10 + 'a');
        }
        return ' ';
    }

    @Test
    public void testAdd36String(){
        System.out.println(add36String("1b", "2x"));
    }
}

Original: https://www.cnblogs.com/GarrettWale/p/16087817.html
Author: Garrett_Wale
Title: LeetCode-补充题9. 36进制加法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583204/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 关于树莓派64位操作系统

    用过树莓派的都知道,在烧录操作系统时,官方只提供的32位的系统,这是官方经过测试和验证比较稳定的系统,对于使用4GB或8GB版本大内存树莓派用户来说,通常会将树莓派拿来充当服务器或…

    Linux 2023年5月27日
    0106
  • 正则表达式 9. 替换分组使用

    https://www.zybuluo.com/Zjmainstay/note/709093 替换分组使用 (9.1)给源串每个链接加上http://www.zjmainstay….

    Linux 2023年6月13日
    094
  • 循环通过逗号分隔的shell变量

    假设我有一个Unix shell变量,如下所示 variable=abc,def,ghij 我想使用for循环提取所有值(abc,def和ghij),并将每个值传递给一个过程。 脚…

    Linux 2023年5月28日
    079
  • k8s-简介

    Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统,K8s 作为缩写的结果来自计算”K”和”s”之间的八个…

    Linux 2023年6月13日
    083
  • python中的cls和self区别

    self:Always use self for the first argument to instance methods self是作为类进行实例化传递的第一个参数,也就是我…

    Linux 2023年6月14日
    090
  • 【Redis】缓存穿透、缓存击穿、缓存雪崩产生原因及解决方案

    一. 本文对Redis中[缓存穿透]、[缓存击穿]、[缓存雪崩]三种现象产生原因、解决方法进行说明 二. 缓存穿透 1. 原因 2. 解决方法 三. 缓存击穿 1. 原因 2. 解…

    Linux 2023年5月28日
    0103
  • [20220303]oracle如何定位使用library cache mutex 3.txt

    [20220303]oracle如何定位使用library cache mutex 3.txt –//这个问题实际上困扰我很久,我开始以为library cache b…

    Linux 2023年6月13日
    071
  • EmuELEC 4.3 安装和乐视手柄 LeWGP-201 evremap问题解决

    一年多前安装了EmuELEC3.9之后, 就一直没有再更新过, 平时玩玩小游戏也很正常. 昨天心血来潮想把吃灰的乐视手柄用起来, 结果发现3.9里面没有evremap 命令. 猜测…

    Linux 2023年5月27日
    0248
  • 剑指offer计划22( 位运算中等)—java

    1.1、题目1 剑指 Offer 56 – I. 数组中数字出现的次数 1.2、解法 救命,真不会用位运算,还是用哈希表做吧,位运算过段时间再学习~~~搞不来,虽然说哈…

    Linux 2023年6月11日
    075
  • C语言实现扫雷游戏(完整版)

    头文件定义、函数声明 下面就是扫雷中使用到的所有函数,为了省事我把所有的代码都放在一个C文件中实现 宏定义中设置了游戏的界面布局,以及设置地雷的个数(这里默认的是10个地雷),界面…

    Linux 2023年6月6日
    0133
  • elasticsearch集群部署

    Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮…

    Linux 2023年6月7日
    077
  • LeetCode 416.分割等和子集 | 类0-1背包问题 | 解题思路及代码

    Given a nonempty array nums, which only contains positive number. Find if the array can be…

    Linux 2023年6月13日
    082
  • shell 同时执行多任务下载视频

    本文为博主原创,转载请注明出处: shell 脚本不支持多线程,但我们需要用shell 脚本同时跑多个任务时怎么让这些任务并发同时进行,可以采用在每个任务 后面 添加一个 &amp…

    Linux 2023年5月28日
    0101
  • 软件工程 统一过程软件(RUP) 第5篇随笔

    1.RUP简介 本质: 是”一般的过程框架” 为软件开发,进行不同抽象层之间”映射”,安排其开发活动的次序,指定任务和需要开发的志平…

    Linux 2023年6月7日
    0116
  • mycat数据库集群系列之数据库多实例安装

    mycat 数据库集群系列之数据库多实例安装 最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考。本次系列终结大…

    Linux 2023年6月14日
    091
  • 如何使用CMake构建c++项目

    1. c++项目构建与CMake简介 在Windows系统上我们通常使用 Visual Studio(VS)来生成我们的c++项目。我们只需在VS相应的层次目录中添加相应的文件即可…

    Linux 2023年6月14日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球