app开发定制算法leetcode|12. 整数转罗马数字(rust重拳出击)


文章目录


12. app开发定制整数转罗马数字:

app开发定制罗马数字包含以下七种字符: IVXLCDM

字符          数值I             1V             5X             10L             50C             100D             500M             1000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

例如, 罗马数字 2 写做 II ,app开发定制即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给你一个整数,将其转为罗马数字。

样例 1:

输入: 	num = 3	输出: 	"III"
  • 1
  • 2
  • 3
  • 4
  • 5

样例 2:

输入: 	num = 4	输出: 	"IV"
  • 1
  • 2
  • 3
  • 4
  • 5

样例 3:

输入: 	num = 9	输出: 	"IX"
  • 1
  • 2
  • 3
  • 4
  • 5

样例 4:

输入: 	num = 58	输出: 	"LVIII"	解释: 	L = 50, V = 5, III = 3.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

样例 5:

输入: 	num = 1994	输出: 	"MCMXCIV"	解释: 	M = 1000, CM = 900, XC = 90, IV = 4.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

提示:

  • 1 <= num <= 3999

原题传送门:


分析

  • 面对这道算法题目,二当家的陷入了沉思。
  • 直接打表,把所有可能的取值都放入字典,简单粗暴。
  • 事实上,我们可以按照个,十,百,千位打表,能少很多。

题解

const THOUSANDS: [&'static str; 4] = ["","M", "MM", "MMM"]; //1000~3000const HUNDREDS: [&'static str; 10] = ["","C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]; //100~900const TENS: [&'static str; 10] = ["","X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]; //10~90const ONES: [&'static str; 10] = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; //1~9impl Solution {    pub fn int_to_roman(mut num: i32) -> String {        let n = num as usize;        let mut roman = THOUSANDS[n / 1000].to_string();        roman.push_str(HUNDREDS[(n % 1000) / 100]);        roman.push_str(TENS[(n % 100) / 10]);        roman.push_str(ONES[n % 10]);        roman    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

go

var (    thousands = []string{"", "M", "MM", "MMM"}    hundreds  = []string{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}    tens      = []string{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}    ones      = []string{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"})func intToRoman(num int) string {    return thousands[num/1000] + hundreds[num%1000/100] + tens[num%100/10] + ones[num%10]}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

c++

const string thousands[] = {"", "M", "MM", "MMM"};const string hundreds[]  = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};const string tens[]      = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};const string ones[]      = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};class Solution {public:    string intToRoman(int num) {        return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];    }};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

java

class Solution {    private static final String[] thousands = {"", "M", "MM", "MMM"};    private static final String[] hundreds  = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};    private static final String[] tens      = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};    private static final String[] ones      = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};    public String intToRoman(int num) {        StringBuilder roman = new StringBuilder();        roman.append(thousands[num / 1000]);        roman.append(hundreds[num % 1000 / 100]);        roman.append(tens[num % 100 / 10]);        roman.append(ones[num % 10]);        return roman.toString();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

typescript

const thousands = ["", "M", "MM", "MMM"];const hundreds = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"];const tens     = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"];const ones     = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];function intToRoman(num: number): string {	const roman = [];    roman.push(thousands[Math.floor(num / 1000)]);    roman.push(hundreds[Math.floor(num % 1000 / 100)]);    roman.push(tens[Math.floor(num % 100 / 10)]);    roman.push(ones[num % 10]);    return roman.join('');};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

python

class Solution:    THOUSANDS = ["", "M", "MM", "MMM"]    HUNDREDS = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]    TENS = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]    ONES = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]    def intToRoman(self, num: int) -> str:        return Solution.THOUSANDS[num // 1000] + \               Solution.HUNDREDS[num % 1000 // 100] + \               Solution.TENS[num % 100 // 10] + \               Solution.ONES[num % 10]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 博客原创~


网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发