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 ...
随机推荐
- Android 的 DatePicker、TimePicker或NumberPicker
布局文件加上这个就可以,去除日期选择器.时间选择器或数值选择器的可编辑状态. android:descendantFocusability="blocksDescendants" ...
- rails查询mongodb通用查询
ruby on rails 很好的跟mongodb进行了结合,gem包: 地址:https://rubygems.org/gems/mongoid 文档:https://docs.mongodb.co ...
- LeetCode-Combinations
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...
- js前台加密,java后台解密实现
参考资料: JS前台加密,java后台解密实现
- MongoDB学习笔记七:管理
[启动和停止MongoDB]『从命令行启动』执行mongod,启动MongoDB服务器.mongod有很多可配置的启动选项:在命令行运行mongod --help可以查看所有选项.一些主要选项如下: ...
- EX:The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
EX:The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secu ...
- Object类的toString方法
Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类 ...
- jquery循环操作
each遍历 用法一. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- linux 几个控制流语句的格式例子(if语句)
linux 几个控制流语句的格式例子:if 语句例子:#!/bin/sh a=10b=20 if [ $a == $b ]then echo "a is equal to b"el ...
- window.showModalDialog的简单实践
Super.jsp - 父窗口 <%@ page language="java" import="java.util.*" pageEncoding=&q ...