算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做整数转罗马数字 ,我们先来看题面:
https://leetcode-cn.com/problems/integer-to-roman/
![f24c6c753b6b0c15e6fbb96f00a8a37e.png](https://i-blog.csdnimg.cn/blog_migrate/2fdf7cfeedd8bd5924d139abeb87aea4.png)
题意
![ec48cb49eec07a5e328f926fe0bf3230.png](https://i-blog.csdnimg.cn/blog_migrate/9a3ae860a86c1193047169f913aea098.png)
样例
示例 1:
输入: 3
输出: "III"
示例 2:
输入: 4
输出: "IV"
示例 3:
输入: 9
输出: "IX"
示例 4:
输入: 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
题解
将给定的整数转换为罗马数字需要找到上述 13 个符号的序列,这些符号的对应值加起来就是整数。根据符号值,此序列必须按从大到小的顺序排列。符号值如下。![a15b586c1b76e3180c2e52dcb0cd1adb.png](https://i-blog.csdnimg.cn/blog_migrate/2e9a2579c13821bbfdbf9d2b8ca297ed.png)
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();
}
今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。
上期推文:
LeetCode刷题实战1:在数组上遍历出花样
LeetCode刷题实战2:用链表模拟加法
LeetCode刷题实战3:最长不重复子串
LeetCode刷题实战4:两个正序数组的中位数
LeetCode刷题实战5:判断回文子串
LeetCode刷题实战6:Z字形变换
LeetCode刷题实战7:整数反转
LeetCode刷题实战8:字符串转换整数
LeetCode刷题实战9:求解回文数
LeetCode刷题实战10:字符串正则匹配
LeetCode刷题实战11: 盛最多水的容器