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)

大家都在看

  • 万字干货|Java基础面试题(2022版)

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 概念常识 Java 语言有哪些…

    Linux 2023年6月6日
    0204
  • 网络安全简单入门与扫描

    网络安全简单入门 内容大纲 策略制定 安全工具 其他 1、安全策略 1.1、安全三要素 要全面地认识一个安全问题,我们有很多种办法,但首先要理解安全问题的组成属性。前人通过无数实践…

    Linux 2023年6月7日
    098
  • Redis集群搭建准备,了解一致性哈希算法和哈希槽

    一致性哈希是在哈希取余算法基础之上优化的,分布式缓存数据变动和映射问题,某个机器宕机了,分母数量改变了,自然取余数不对了。用于解决分布式缓存系统中的数据选择节点存储问题和数据选择节…

    Linux 2023年5月28日
    095
  • Springboot 实现Redis 同数据源动态切换db

    参考:https://developer.aliyun.com/article/952648 Original: https://www.cnblogs.com/herd/p/16…

    Linux 2023年5月28日
    0112
  • tomcat上部署jenkins

    tomcat上部署jenkins tomcat上部署jenkins 部署tomcat 部署jenkins Jenkins创建流水线任务 主机名称 IP地址 需要的应用服务 工具包 …

    Linux 2023年6月6日
    0119
  • linux命令之查找grep

    grep(全称:Global Regular Expression Print)是一种强大的文本搜索工具,它可以使用正则表达式搜索文本,并把匹配的行打印出来。它的使用权限是所有用户…

    Linux 2023年5月27日
    0107
  • OpenResty入门

    OpenResty介绍 OpenResty通过汇聚各种设计精良的 Nginx模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web …

    Linux 2023年6月8日
    098
  • Question06-查询”李”姓老师的数量

    问题比较简单,一个单表查询就可以解决,这里就不过多地讲解 Original: https://www.cnblogs.com/OnlyOnYourself-lzw/p/165738…

    Linux 2023年6月7日
    092
  • Windows 2008 R2 Powershell 3.0

    下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=34595&WT.mc_id=rss_alldow…

    Linux 2023年5月28日
    0119
  • 驱动写用户态应用程序的标准输出卡死

    问题描述 驱动写用户态应用程序的标准输出,pipe卡住,导致驱动不能正常继续工作注:感谢木三的解决方法. 问题解决 lsof 查看pipe管道 #lsof python3 2581…

    Linux 2023年6月6日
    0103
  • CSAPP 之 CacheLab 详解

    前言 本篇博客将会介绍 CSAPP 之 CacheLab 的解题过程,分为 Part A 和 Part B 两个部分,其中 Part A 要求使用代码模拟一个高速缓存存储器,Par…

    Linux 2023年6月7日
    0142
  • 前端Web实训项目-教务系统成绩查询

    通过暑期前半个月实训,我们选的方向是Web前端(虽然我想选Java全栈的),所以我们最终确立的主题是做一个网页。 这个项目是我们组四个人做的,因为技术水品都不咋样,所以有很多地方需…

    Linux 2023年6月7日
    0121
  • MySQL提示sql_mode=only_full_group_by解决办法

    MySQL异常sql_mode=only_full_group_by 原因:在MySQL 5.7后MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。会报sql_mo…

    Linux 2023年6月13日
    0129
  • [20220909]bbed关于删除记录恢复的问题.txt

    [20220909]bbed关于删除记录恢复的问题.txt –//快下班被别人问的关于删除记录使用bbed恢复的问题,我开始以为很快讲解完,删除记录oracle仅仅打上…

    Linux 2023年6月13日
    083
  • linux mv 命令中断的解决办法

    背景:使用mv对服务器文件进行迁移的过程中,因为网络中断,所以迁移到一半被停止了。 现状:有一部分文件没有迁移完,但是文件夹已经存在了,重新mv提示文件夹已经存在,切已经有文件,所…

    Linux 2023年6月14日
    083
  • 计算机辅助数据绘图(matlabpythonjs)

    1. matlab绘图 官方说明:https://ww2.mathworks.cn/help/matlab/creating_plots/types-of-matlab-plots…

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