今天和大家聊的问题叫做整数转罗马数字,我们先来看题面:
https://leetcode-cn.com/problems/integer-to-roman/
题意
样例
示例 1: 输入: 3 输出: "III" 示例 2: 输入: 4 输出: "IV" 示例 3: 输入: 9 输出: "IX" 示例 4: 输入: 58 输出: "LVIII" 解释: L = 50, V = 5, III = 3.
题解
将给定的整数转换为罗马数字需要找到上述 13 个符号的序列,这些符号的对应值加起来就是整数。根据符号值,此序列必须按从大到小的顺序排列。符号值如下。
如概述中所述,表示应该使用尽可能大的符号,从左侧开始工作。因此,使用贪心算法是有意义的。贪心算法是一种在当前时间做出最佳可能决策的算法;在这种情况下,它会取出最大可能的符号。
为了表示一个给定的整数,我们寻找适合它的最大符号。我们减去它,然后寻找适合余数的最大符号,依此类推,直到余数为0。我们取出的每个符号都附加到输出的罗马数字字符串上。
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; public String intToRoman(int num) { StringBuilder sb = new StringBuilder(); // Loop through each symbol, stopping if num becomes 0. for (int i = 0; i < values.length && num >= 0; i++) { // Repeat while the current symbol still fits into num. while (values[i] <= num) { num -= values[i]; sb.append(symbols[i]); } } return sb.toString(); }
今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。