leetcode-【hard】273. Integer to English Words
题目:
273. Integer to English Words
For example,
123 -> "One Hundred Twenty Three"
12345 -> "Twelve Thousand Three Hundred Forty Five"
1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
答案:
按着自己用英文阅读整数的顺序来就行:
1、这道题目不是难在思路上,而是难在考虑的情况比较多,比较多细节,一不小心就有小bug,需要思路清晰,逻辑清晰
2、英文中用来表示整数的单词并不多,分类:
1-9(个位数),11-19(特殊的十位数),10-90(十位数),100(hundred),1000(thousand),1000000(million),1000000000(billion)
3、10这个十位数比较特别,只有在后两位完全为10时,才用ten
4、注意空格,后面没有数字了,就不能加空格了
5、每千位数跟后面的千位数(如果不为空,即0000000……)要有空格
6、注意不要乱加前缀空格和后缀空格
将上面的细节注意了就AC啦
代码:
#include <vector>
#include <string> using std::vector;
using std::string; string n2s[] = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
string g2s[] = {"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
string t2s[] = {"Ten","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"}; class Solution {
private:
vector<string> ans; public:
string numberToWords(int num) {
if(num == )
{
return "Zero";
} unsigned int rem;
unsigned int one;
unsigned int two;
unsigned int three; string perAns;
ans.clear(); do
{
//获取余数
rem = num % ;
num = num /; //存储每次计算的结果
perAns.clear();
perAns = ""; //一千以内的数,取每一位
one = rem % ;
two = (rem / ) % ;
three = (rem / ) % ; if(three != )
{
perAns += n2s[three - ];
perAns += " Hundred";
} //如果后两位都为0,那么后面就没有数了,也就不需要加空格
if(perAns != "" && (one != || two != ))
{
perAns += " ";
} if(two == )
{
//考虑最后一位是否为0的情况,因最后两位为10时,需要用“ten”
//否则就是十位数
if(one == )
{
perAns += t2s[];
}else
{
perAns += g2s[one - ];
}
//考虑two不为0,不为1,则按一般规则去计算
}else if(two != )
{
perAns += t2s[two - ]; if(one != )
{
perAns += " ";//如果最后一位不为0,需要在其前面加空格
perAns += n2s[one - ];
}
//考虑two为0的情况
}else
{
if(one != )
{
perAns += n2s[one - ];
}
} //将结果存储到ans中,ans中的答案是以逆序形式存储了每个千位数
ans.push_back(perAns);
}while(num != ); string result = "";
unsigned int len = ans.size();
//len最大长度为4,考虑每种位数就行,这里用的时候就会发现,合理使用goto,程序逻辑会很清晰
switch(len)
{
case :goto three;break;
case :goto two;break;
case :goto one;break;
case :goto zero;break;
} three:
if(ans[] != "")
{
result += ans[];
result += " Billion"; if(ans[] != "" || ans[] != "" || ans[] != "")
{
result += " ";
}
} two:
if(ans[] != "")
{
result += ans[];
result += " Million"; if(ans[] != "" || ans[] != "")
{
result += " ";
}
} one:
if(ans[] != "")
{
result += ans[];
result += " Thousand"; if(ans[] != "")
{
result += " ";
}
} zero:
if(ans[] != "")
{
result += ans[];
} return result;
}
};
说明: 合理使用goto会取到很好的效果哦
leetcode-【hard】273. Integer to English Words的更多相关文章
- 【LeetCode】273. Integer to English Words
Integer to English Words Convert a non-negative integer to its english words representation. Given i ...
- LeetCode 【2】 Reverse Integer --007
六月箴言 万物之中,希望最美:最美之物,永不凋零.—— 斯蒂芬·金 第二周算法记录 007 -- Reverse Integer (整数反转) 题干英文版: Given a 32-bit signed ...
- LeetCode: 【L4】N-Queens 解题报告
[L4]N-Queens 解题报告 N-Queens Total Accepted: 16418 Total Submissions: 63309 My Submissions The n-queen ...
- leetcode@ [273] Integer to English Words (String & Math)
https://leetcode.com/problems/integer-to-english-words/ Convert a non-negative integer to its englis ...
- [LeetCode] 273. Integer to English Words 整数转为英文单词
Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...
- LeetCode 273. Integer to English Words
原题链接在这里:https://leetcode.com/problems/integer-to-english-words/description/ 题目: Convert a non-negati ...
- 【LeetCode算法-7】Reverse Integer
LeetCode第7题: Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outp ...
- [leetcode]273. Integer to English Words 整数转英文单词
Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...
- 【Leetcode】【Easy】Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Have you ...
随机推荐
- 如何配置网络使得宿主机能够访问VM数据库?
https://www.zhihu.com/question/23955166 背景:公司内外网区分,不能同时上,局域网内得手动切换两个网络,分别访问外网或者内网,ip是动态获取的.现在本机上装有vm ...
- git submodule 使用
这个是备忘录,原网页: https://medium.com/@porteneuve/mastering-git-submodules-34c65e940407 http://cncc.bingj.c ...
- css z-index属性使用过程中遇到的问题
z-index属性在web开发中会经常使用,其主要的作用简单的说就是把元素的position设置为absolute.fixed之后,可以调节元素在文档上的层级关系.比如经常见到的dialog,mask ...
- PCB的过孔
在走多层板时,经常需要打过孔,那么过孔是怎么分类的呢?且往下看. (1)通孔:这种孔穿过整个线路板,可以用于内部互连或者作为元件的安装定位孔(用于连接层:生成钻孔文件,在PCB上打孔并在孔内电镀:通常 ...
- 学C日志
学C历程 这里记录的都是笔记 忘记了好回头看看~ 提示 :如果在双击自己编译的程序运行时一下就消失不见了 可以在程序代码末尾加上 system("pause"); 程序就会等待到输 ...
- WPF 打印
1. System.Windows.Controls.PrintDialog printDialog = new System.Windows.Controls.PrintDialog(); if ( ...
- Android学习十二:跑马灯程序实现(简单联系)
package org.tonny; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; ...
- photoshop,黑白转彩色单色
方法一: 打开 色相/饱和度 面板,勾选上 着色, 然后调节 明度 滑块. 方法二: 前面方法的缺点是会将修改直接塌陷到图层,如果想不塌陷,可以使用色相蒙板: 同样勾选 着色
- 【SharePoint学习笔记】第2章 SharePoint Windows PowerShell 指南
快速了解Windows PowerShell 从SharePoint 2010开始支持PowerShell,仍支持stsadm.exe工具: 可以调用.NET对象.COM对象.exe文 ...
- [Android] ADB操作相关经验
1.手机必须先root,小米可以安卓开发版系统即可.(注意:usb设置为调试模式) 2.安卓 adb工具(android debug bridge) 3.依次执行下面的命令: #adb root 获得 ...