LeetCode每日一题之LeetCode273

编程入门 行业动态 更新时间:2024-10-11 11:19:21

<a href=https://www.elefans.com/category/jswz/34/1769930.html style=LeetCode每日一题之LeetCode273"/>

LeetCode每日一题之LeetCode273

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位的三个数组成的和: 单位为Thousandif (index == 6) {String val = find(sum);if (!val.equals("")) {list.add(val + " " + thousand + " ");}//重置sum和pow的值sum = 0;pow = 1;}//存储第7位到第9位的三个数组成的和: 单位为Millionif (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,则为100int bw = sum / 100;       //百位对应的数字,例如123,则为1int sw = sum - b;         //剩余的十位数字,例如123,则为23if (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();}
}

更多推荐

LeetCode每日一题之LeetCode273

本文发布于:2024-02-13 20:51:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760256.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:LeetCode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!