1504 字
约 5 分钟
22
LeetCode刷题Java版012.整数转罗马数字
无标签

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
LeetCode刷题Java版012.整数转罗马数字
https://clxhxhhr.top/posts/2566/
作者
clxstart
发布于
2026-09-19
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。