LeetCode每日一题之LeetCode273_整数转换英文表示

Java实现 LeetCode 273 整数转换英文表示 273. 整数转换英文表示 将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 – 1 。 示例 1: 输入: 123 输出: “One Hundred Twenty Three” 示例 2: 输入: 12345 输出: “Twelve Thousand Three Hundred Forty Five” 示例 3: 输入: 1234567 输出: “One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven” 示例 4: 输入: 1234567891 输出: “One Billion Two Hund 立即下载

LeetCode273. 整数转换英文表示

LeetCode273

将非负整数 num 转换为其对应的英文表示。

示例 1:

输入:num = 123
输出:"One Hundred Twenty Three"

示例 2:

输入:num = 12345
输出:"Twelve Thousand Three Hundred Forty Five"

示例 3:

输入:num = 1234567
输出:"One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

示例 4:

输入:num = 1234567891
输出:"One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"

提示:

  • 0 <= num <= 231 - 1

题解:

这道题我的整体思路就是首先定义一个Map集合来存储需要的数字以及其对应的英文,然后我们以三个数为一组进行分割(从后往前),然后对这三个数组成的一组进行英文的转换,并将其结果保存在一个List集合中,最后,可能会出现三个数不满的情况,我们在对其进行单独的处理,最后将List集合中的字符串进行再拼接,得到最后的结果集。

我们以示例4举例,思路过程如下所示:

在这里插入图片描述

代码实现:

public class LeetCode273 {
    public static void main(String[] args) {
        System.out.println(new LeetCode273().numberToWords(1000000));

    }

    //定义一个辅助的map以及对应百,千,百万,10亿的单位变量
    Map<Integer,String> map = new HashMap<>();
    String hundred = "Hundred";
    String billion = "Billion";
    String million = "Million";
    String thousand = "Thousand";
    public String numberToWords(int num) {
        //如果num为0,则直接返回结果
        if(num == 0) {
            return "Zero";
        }
        //map存储值
        map.put(1,"One");map.put(2,"Two");map.put(3,"Three");map.put(4,"Four");map.put(5,"Five");map.put(6,"Six");map.put(7,"Seven");map.put(8,"Eight");map.put(9,"Nine");map.put(10,"Ten");
        map.put(11,"Eleven");map.put(12,"Twelve");map.put(13,"Thirteen");map.put(14,"Fourteen");map.put(15,"Fifteen");map.put(16,"Sixteen");map.put(17,"Seventeen");map.put(18,"Eighteen");map.put(19,"Nineteen");
        map.put(20,"Twenty");map.put(30,"Thirty");map.put(40,"Forty");map.put(50,"Fifty");map.put(60,"Sixty");map.put(70,"Seventy");map.put(80,"Eighty");map.put(90,"Ninety");
        //list存储最后的的结果
        List<String> list = new ArrayList<>();
        int index = 0;
        //每三数为一组,用sum记录每三个数所组成的和
        int sum = 0;
        int pow = 1;
        while(num > 0) {
            sum = (num % 10) * pow + sum;
            num = num / 10;
            pow = pow * 10;
            ++index;
            //存储第1位到第3位的三个数组成的和: 单位无
            if (index == 3) {
                String val = find(sum);
                list.add(val);
                //重置sum和pow的值
                sum = 0;
                pow = 1;
            }
            //存储第4位到第6位的三个数组成的和: 单位为Thousand
            if (index == 6) {
                String val = find(sum);
                if (!val.equals("")) {
                    list.add(val + " " + thousand + " ");
                }
                //重置sum和pow的值
                sum = 0;
                pow = 1;
            }
            //存储第7位到第9位的三个数组成的和: 单位为Million
            if (index == 9) {
                String val = find(sum);
                if (!val.equals("")) {
                    list.add(val + " " + million + " ");
                }
                //重置sum和pow的值
                sum = 0;
                pow = 1;
            }
        }

        //退出while循环,如果此时sum不为0,则说明不满百位,我们根据此时index的值的范围存储最后应该是哪个范围的值
        if (sum != 0) {
            if(index < 3) {
                String val = findSub(sum);
                list.add(val);
            }else if(index < 6) {
                String val = findSub(sum) + " " + thousand + " ";
                list.add(val);
            }else if (index < 9) {
                String val = findSub(sum) + " " + million + " ";
                list.add(val);
            }else {
                String val = map.get(sum) + " " + billion + " ";
                list.add(val);
            }
        }

        //最后进行结果集的拼接...
        StringBuilder res = new StringBuilder();
        for (int i = list.size() - 1; i >= 0; i--) {
            res.append(list.get(i));
        }
        return res.toString().trim();
    }



    //找到不足百位对应的英文
    private String findSub(int sum) {
        //如果此时sum是map中已经存在的key,则直接返回其对应的value值
        if (sum <= 20 || sum % 10 == 0) {
            return map.get(sum);
        }
        //否则我们依次取出其十位和个位,进行对应的英文的求解
        StringBuilder sb = new StringBuilder();
        int sw = sum / 10 * 10;   //取整的十位
        int gw = sum - sw;         //个位数
        if (sw > 0) {
            sb.append(map.get(sw));
        }
        if (gw > 0) {
            sb.append(" ").append(map.get(gw));
        }
        return sb.toString().trim();
    }


    //找到足百位对应的英文
    private String find(int sum) {
        StringBuilder sb = new StringBuilder();
        int b = sum / 100 * 100;  //取整的百位数,例如123,则为100
        int bw = sum / 100;       //百位对应的数字,例如123,则为1
        int sw = sum - b;         //剩余的十位数字,例如123,则为23
        if (sw <= 20 || sw % 10 == 0) {
            if (bw > 0) {
                sb.append(map.get(bw)).append(" ").append(hundred);
            }
            if (sw > 0) {
                sb.append(" ").append(map.get(sw));
            }
        }else {
            int s = sw / 10 * 10;   //取整的十位数
            int gw = sw - s;        //个位数
            if (bw > 0) {
                sb.append(map.get(bw)).append(" ").append(hundred);
            }
            if (s > 0) {
                sb.append(" ").append(map.get(s));
            }
            if (gw > 0) {
                sb.append(" ").append(map.get(gw));
            }
        }
        //因为我们的前后可能多添加了空格,这里我们统一使用trim()去除多余的空格
        return sb.toString().trim();
    }
}
告别反复刷写:用英飞凌XCP Overlay功能实现ECU标定与诊断的‘热更新’ 本文详细介绍了英飞凌XCP Overlay功能在ECU标定与诊断中的应用,实现参数的'热更新',避免反复刷写Flash。通过地址重映射技术,将标定变量从Flash重定向到RAM,显著提升工作效率并保护Flash寿命。文章涵盖技术原理、工程实践、功能安全考量及高级应用场景,为汽车电子工程师提供完整解决方案。 阅读详情

相关推荐

GB28181协议实战:5分钟搞定海康摄像头SIP注册失败问题(附Wireshark抓包分析)

本文详细解析了海康摄像头在GB28181协议下SIP注册失败的7个关键原因及解决方案,包括网络可达性、鉴权参数、NAT穿越等核心问题。通过Wireshark抓包分析,提供快速定位方法,帮助工程师高效解决SIP注册失败问题,提升实时图像联调效率。

weixin_29212867的博客 551

LeetCode 第 273 场周赛题解及思路

LeetCode 第 273 场周赛题解及思路 2119. 反转两次的数字 2120. 执行所有后缀指令 2121. 相同元素的间隔之和 2122. 还原原数组

weixin_46323890的博客 625

告别深度学习!用5个麦克风搞定多说话人分离:ReTM算法保姆级教程

本文详细介绍了ReTM算法,这是一种无需深度学习、仅需5个麦克风即可实现多说话人语音分离的创新信号处理方法。它通过估计相对传递矩阵,利用空间物理信息在混响环境中分离语音,具有数据需求低、计算复杂度小、无需先验几何信息等优势,特别适合嵌入式设备和资源受限场景。

desk3的博客 156

LeetCode-Algorithms-[Hard]273. 整数转换英文表示

将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。 示例 1: 输入: 123 输出: “One Hundred Twenty Three” 示例 2: 输入: 12345 输出: “Twelve Thousand Three Hundred Forty Five” 示例 3: 输入: 1234567 输出: “One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven” 示例 4: 输入:

AlphaCat的博客 586

图解凸函数与凹函数:别再被数学定义搞晕了!

本文通过图解和生活化类比,深入浅出地解释了凸函数与凹函数的数学定义及其与日常直觉的差异。文章详细介绍了凸函数的图像特征、数学定义(包括二阶导数判断)、在机器学习中的重要性,以及常见误区和实际应用中的判断技巧,帮助读者彻底理解这一关键数学概念。

weixin_29159441的博客 651

保姆级教程:用MS建完分子模型,如何一键转成LAMMPS能用的data文件?

本文详细介绍了如何将Materials Studio(MS)构建的分子模型转换为LAMMPS可用的data文件的全流程。重点讲解了力场选择、环境配置、转换命令参数解析及常见问题排查,帮助初学者快速掌握MS与LAMMPS之间的数据转换技巧,特别适合计算材料学领域的研究人员。

weixin_42665255的博客 471

LeetCode 541. Reverse String II【字符串】简单

Given a string and an integer k , you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal

memcpy0的博客 630

GAN网络详解析

介绍目前常见的GAN网络,以及GAN网络的基本组成

wm199的博客 6504

LeetCode刷题offer17-简单-打印从1到最大的n位数

算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!

布小禅的博客 5450

从原理到落地:监控 SAP OData bgRFC 队列的全景实践指南

摘要(150字) 本文系统讲解SAP Gateway/Backend场景中bgRFC队列的监控方法。内容涵盖:1)监控必要性——确保异步可靠传输,及时识别失败消息;2)两种服务质量(EO/EOIO)对监控策略的影响;3)通过事务码SBGRFCMON和SPRO路径访问监控界面;4)关键授权S_BGRFC的配置要求;5)详细操作指南包括筛选条件和动作选项;6)标准巡检脚本;7)三个典型案例(认证错误、顺序阻塞、调度压力)的诊断与修复方案。全文提供完整的监控方法论和实战指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 284

[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe案例分析。这篇文章将继续详细讲解WannaCry蠕虫的传播机制,带领大家详细阅读源代码,分享WannaCry勒索病毒是如何传播感染的。作者分析该病毒一个月,一方面觉得自己技术菜,另一方面深知系统安全需要坚持,继续加油。希望文章对您有所帮助~

杨秀璋的专栏 1万+

273. 整数转换英文表示

题目:将非负整数num转换为其对应的英文表示。 示例1: 输入:num = 123 输出:“One Hundred Twenty Three” 示例2: 输入:num = 12345 输出:“Twelve Thousand Three Hundred Forty Five” 示例3: 输入:num = 1234567 输出:“One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven” 示例4: 输入:n.

weixin_45512222的博客 509

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

《Leetcode每日一题》273.整数转换英文表示

关键: 1.区分区间,每一千变换一次 2.多弄几个字符数组进行变化,会简单一些 class Solution { string small[20] = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten","Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Ei...

shawnlycheeo的博客 163

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LeetCode-每日一题 273. 整数转换英文表示 [Java实现] [极速]

将非负整数num转换为其对应的英文表示。 示例 1: 输入:num = 123 输出:"One Hundred Twenty Three" 方法一:好好学英语 总所周知,在英语中我们读书是三个一位的,那么对于每三位数 [1, 999],我们可以单独写一个函数来处理每三位。为了更方便的构建字符串,我们将 0-20, 20 - 90, 1e3 - 1e6的词组储存在三个数组中,构建时对数进行除法并取余来获取对应词汇。 private static final St...

qq_51026595的博客 295

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

2021-10-11 LeetCode273-整数转换英文表示(每日一题)

题目没啥难点,就是心细点,把细节考虑到就好了,也没啥亮点。。。打卡~ class Solution { public: string numberToWords(int num) { string res; if (!num) return "Zero"; map<int, string> Table = { {1000000000, "Billion "},

qq_45773844的博客 157

LeetCode刷题273-困难-整数转换成英文

算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!

布小禅的博客 5641

LeetCode 273. 整数转换英文表示 / 29. 两数相除 / 412. Fizz Buzz

273. 整数转换英文表示 2021.10.11 每日一题 题目描述 将非负整数 num 转换为其对应的英文表示。 示例 1: 输入:num = 123 输出:“One Hundred Twenty Three” 示例 2: 输入:num = 12345 输出:“Twelve Thousand Three Hundred Forty Five” 示例 3: 输入:num = 1234567 输出:“One Million Two Hundred Thirty Four Thousand Five

windyjcy的博客 261

力扣每日一题2021-10-11整数转换英文表示

整数转换英文表示273.整数转换英文表示题目描述思路:模拟 273.整数转换英文表示 题目描述 整数转换英文表示 思路:模拟 使用百、十、二十以内组合小于1000的数,大于1000的数以3个3个为一节进行递归处理。 class Solution: def numberToWords(self, num: int) -> str: # 模拟 list1 = ["Zero", "One", "Two", "Three", "Four", "Five", "Si

wcy1034036507的博客 178

《LeetCode之每日一题》:175.数字转换英文表示

整数转换英文表示有关题目题解 题目链接:整数转换英文表示 有关题目 将非负整数 num 转换为其对应的英文表示。 示例 1: 输入:num = 123 输出:"One Hundred Twenty Three" 示例 2: 输入:num = 12345 输出:"Twelve Thousand Three Hundred Forty Five" 示例 3: 输入:num = 1234567 输出:"One Million Two Hundred Thirty Four Thousand Five

MerryMaking7946的博客 419

leetcode-每日一题2021.10.11 整数转换英文表示

题目 力扣 思路 代码

zy的博客 156

力扣每日一题

是一个高效、灵活的工具,适合在单线程环境中对字符串进行频繁修改。它常用于字符串拼接、插入、删除、替换等操作,尤其是在构建大量字符串或处理大文本时,比直接使用String效率更高。如果你需要连接多个字符串并使用分隔符(如逗号、空格等),那么 StringJoiner是理想的选择。如果你需要在多线程环境下频繁修改字符串(例如拼接、删除等操作),那么 StringBuffer更加合适。

m0_73883551的博客 1968

力扣每日一题8:字符串转换整数

请你来实现一个函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的atoi函数)。函数0−231−231231 − 1231 − 1' 's = "42"42加粗的字符串为已经读入的字符,插入符号是当前读取的字符。第 1 步:"42"(当前没有读入字符,因为没有前导空格)第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')第 3 步:"42"(读入 "42")解析得到整数 42。

m0_73441691的博客 154

【Leetcode 每日一题】8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi)

weixin_50947533的博客 564

21年10月第三周 力扣每日一题记录

本周每日一题 题目 lc273. 整数转换英文表示 10-11 lc273. 整数转换英文表示 这题真是把我恶心到了,没有给数字与单词的映射表,我真是服了,自己敲半天,而且我单词敲错了好几个,真是书白读了 不过还算是好题,我的思路是先解决十亿和百万的级别,逻辑为,用 iii 标识当前位,用 exceedexceedexceed 来标识超出当前档次的数位,比如当前是9位,就是超过了7位的百万2位 然后百万以下的单独算,也是一样的逻辑,先来弄千,再来百,然后每次都是先处理超过的部分,再加上当前的档次,然后

或左的博客 318

【每日一题-leetcode】8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi) 字符串转换整数 (atoi) 难度中等765收藏分享切换为英文关注反馈 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余

芝兰生于深谷,不以无人而不芳 608

Leetcode每日一题821. 字符的最短距离

Leetcode每日一题821. 字符的最短距离

小羊的博客 879
上一篇: String的常见面试难点汇总
下一篇: 下载安装Python解释器环境详细教程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值