1、题目
2、解法
@1:和之前将num/10、num%10的概念是一样的,只不过这里除以、求余的是特定的数字,因为不确定num有几位,所以使用了所有的数字来尝试,但是同时得保证求余的num!=0, 所以有两个条件&&
@2:添加几次罗马数字,由count决定
class Solution {
public String intToRoman(int num) {
if (num < 0 || num > 3999) {
return null;
}
int[] numArray = new int[]{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] romaArray = new String[]
{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
StringBuffer s = new StringBuffer();
for (int i = 0; i < numArray.length && num != 0; i++) {
int count = num / numArray[i];
// 如果 count = 0 ,那么代表不包含这个值
while (count > 0) {
s.append(romaArray[i]);
--count;
}
num = num % numArray[i];
}
return s.toString();
}
}
时间复杂度O(n) (因为数值的范围为0-3999,每个罗马数字的count最大为3,所以第一层循环为n,第二层为3,总3n,即n),空间复杂度为O(n)