leetcode12 整数转罗马数字
由于存在放在左边的情况,排列方式并非一种,所以方便起见,可以把特殊情况的组合单独拎出来,打表(字典法)来做。
1、首先尝试了对象字典
var intToRoman = function (num) {
let res = "";
let table = {
1000: "M",
900: "CM",
500: "D",
400: "CD",
100: "C",
90: "XC",
50: "L",
40: "XL",
10: "X",
9: "IX",
5: "V",
4: "IV",
1: "I",
};
for (item in table) {
if (num == 0) {
return res;
}
while (num >= item) {
num -= item;
res += table[item];
}
}
};
由于对象for-in遍历时的特点,数字遍历会自动排序,从小到大进行遍历,之后再按定义顺序进行遍历,
举例测试:
let test = {
3: "3",
1: "1",
b: "b",
a: "a",
};
for (i in test) {
console.log(i, test[i]);
}
//1 1
//3 3
//b b
//a a
2、故转而采用了数组字典法解决
//字典法2,利用数组的有序性,从大到小进行转化
var intToRoman = (num)=>{
let res = '';
const valueSymbols = [
[1000, "M"],
[900, "CM"],
[500, "D"],
[400, "CD"],
[100, "C"],
[90, "XC"],
[50, "L"],
[40, "XL"],
[10, "X"],
[9, "IX"],
[5, "V"],
[4, "IV"],
[1, "I"],
];
for([val,sym] of valueSymbols){
if(num==0){
return res;
}
while(num>=val){
res+=sym;
num-=val;
}
}
return res;
}
时间复杂度O(1)
空间复杂度O(1)
还没有评论,来说两句吧...