LeetCode刷题Java版012.整数转罗马数字
作者:沉默王二
发布时间:2022-07-26T11:44:15.494+0800
012.整数转罗马数字
题意
给你一个整数数字n,让你转化为对应的罗马数字。
n的范围为1 <= n <= 3999
难度
中等
示例
示例1
输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例2
输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.
示例3
输入: num = 9
输出: "IX"
分析
本题并不难,主要面对的问题,就是找出4、9、40、90……和罗马数字之间的关联关系。
日常生活中,我们把个、十、百、千、万这样的进制固定为的形式。那么,仔细观察一下示例2和3,我们就能够发现,罗马字符也是一种不定长、不定次方级别的进制,所以我们只需要把4、9、40、90……也当成进制中的数,利用正常的罗马数字 +(加上) 4、9、40、90……代表的罗马数字组成一个新的进制来将原本的十进制数转化成罗马数字就可以了。
想一下,十进制转换成二进制,实际上就是最高位依次减,直到无法减为止即可,接着是最高位的下一位。
最终我们可以整理出这样的一个对应的进制单位:
{1000,900,500,400,100,90,50,40,10,9,5,4,1};
{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
所以我们只要按高位到低位依次减去即可。
public class Solution{
int[] nums = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] matchs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
public String intToRoman(int num){
StringBuilder res = new StringBuilder();
for(int i = 0;i < nums.length ;i++){
while(num >= nums[i]){
num -= nums[i];
res.append (matchs[i]);
}
if(num == 0)
break;
}
return res.toString();
}
}
因为n的范围很小,所以我们按位去遍历也不会超时,而且也能够获得比较不错的效果。
总结
看到一些转化问题的时候,最重要的是抓住转化的规律,从而把抽象的东西具化到代码中。可以联想一些日常工作中用过的转化案例,从而更方便地去解决问题。
力扣链接:https://leetcode.cn/problems/integer-to-roman/
#LeetCode刷题🤟# @炳源
文档托管在语雀平台上,访问链接和密码戳这个链接:https://t.zsxq.com/6iuzn6I
012.整数转罗马数字
题意
给你一个整数数字n,让你转化为对应的罗马数字。
n的范围为1 <= n <= 3999
难度
中等
示例
示例1
输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例2
输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.
示例3
输入: num = 9
输出: "IX"
分析
本题并不难,主要面对的问题,就是找出4、9、40、90……和罗马数字之间的关联关系。
日常生活中,我们把个、十、百、千、万这样的进制固定为的形式。那么,仔细观察一下示例2和3,我们就能够发现,罗马字符也是一种不定长、不定次方级别的进制,所以我们只需要把4、9、40、90……也当成进制中的数,利用正常的罗马数字 +(加上) 4、9、40、90……代表的罗马数字组成一个新的进制来将原本的十进制数转化成罗马数字就可以了。
想一下,十进制转换成二进制,实际上就是最高位依次减,直到无法减为止即可,接着是最高位的下一位。
最终我们可以整理出这样的一个对应的进制单位:
{1000,900,500,400,100,90,50,40,10,9,5,4,1};
{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
所以我们只要按高位到低位依次减去即可。
public class Solution{
int[] nums = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] matchs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
public String intToRoman(int num){
StringBuilder res = new StringBuilder();
for(int i = 0;i < nums.length ;i++){
while(num >= nums[i]){
num -= nums[i];
res.append (matchs[i]);
}
if(num == 0)
break;
}
return res.toString();
}
}
因为n的范围很小,所以我们按位去遍历也不会超时,而且也能够获得比较不错的效果。
总结
看到一些转化问题的时候,最重要的是抓住转化的规律,从而把抽象的东西具化到代码中。可以联想一些日常工作中用过的转化案例,从而更方便地去解决问题。
力扣链接:https://leetcode.cn/problems/integer-to-roman/
#LeetCode刷题🤟# @炳源
文档托管在语雀平台上,访问链接和密码戳这个链接:https://t.zsxq.com/6iuzn6I
012.整数转罗马数字
题意
给你一个整数数字n,让你转化为对应的罗马数字。
n的范围为1 <= n <= 3999
难度
中等
示例
示例1
输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例2
输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.
示例3
输入: num = 9
输出: "IX"
分析
本题并不难,主要面对的问题,就是找出4、9、40、90……和罗马数字之间的关联关系。
日常生活中,我们把个、十、百、千、万这样的进制固定为的形式。那么,仔细观察一下示例2和3,我们就能够发现,罗马字符也是一种不定长、不定次方级别的进制,所以我们只需要把4、9、40、90……也当成进制中的数,利用正常的罗马数字 +(加上) 4、9、40、90……代表的罗马数字组成一个新的进制来将原本的十进制数转化成罗马数字就可以了。
想一下,十进制转换成二进制,实际上就是最高位依次减,直到无法减为止即可,接着是最高位的下一位。
最终我们可以整理出这样的一个对应的进制单位:
{1000,900,500,400,100,90,50,40,10,9,5,4,1};
{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
所以我们只要按高位到低位依次减去即可。
public class Solution{
int[] nums = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] matchs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
public String intToRoman(int num){
StringBuilder res = new StringBuilder();
for(int i = 0;i < nums.length ;i++){
while(num >= nums[i]){
num -= nums[i];
res.append (matchs[i]);
}
if(num == 0)
break;
}
return res.toString();
}
}
因为n的范围很小,所以我们按位去遍历也不会超时,而且也能够获得比较不错的效果。
总结
看到一些转化问题的时候,最重要的是抓住转化的规律,从而把抽象的东西具化到代码中。可以联想一些日常工作中用过的转化案例,从而更方便地去解决问题。
力扣链接:https://leetcode.cn/problems/integer-to-roman/
#LeetCode刷题🤟# @炳源
文档托管在语雀平台上,访问链接和密码戳这个链接:https://t.zsxq.com/6iuzn6I
知识星球
扫码加入星球
查看更多优质内容
https://wx.zsxq.com/mweb/views/joingroup/join_group.html?group_id=15522885221412