leetcode12 整数转罗马数字

深藏阁楼爱情的钟 2022-10-09 02:50 227阅读 0赞

在这里插入图片描述
由于存在放在左边的情况,排列方式并非一种,所以方便起见,可以把特殊情况的组合单独拎出来,打表(字典法)来做。
1、首先尝试了对象字典

  1. var intToRoman = function (num) {
  2. let res = "";
  3. let table = {
  4. 1000: "M",
  5. 900: "CM",
  6. 500: "D",
  7. 400: "CD",
  8. 100: "C",
  9. 90: "XC",
  10. 50: "L",
  11. 40: "XL",
  12. 10: "X",
  13. 9: "IX",
  14. 5: "V",
  15. 4: "IV",
  16. 1: "I",
  17. };
  18. for (item in table) {
  19. if (num == 0) {
  20. return res;
  21. }
  22. while (num >= item) {
  23. num -= item;
  24. res += table[item];
  25. }
  26. }
  27. };

由于对象for-in遍历时的特点,数字遍历会自动排序,从小到大进行遍历,之后再按定义顺序进行遍历,

举例测试:

  1. let test = {
  2. 3: "3",
  3. 1: "1",
  4. b: "b",
  5. a: "a",
  6. };
  7. for (i in test) {
  8. console.log(i, test[i]);
  9. }
  10. //1 1
  11. //3 3
  12. //b b
  13. //a a

2、故转而采用了数组字典法解决

  1. //字典法2,利用数组的有序性,从大到小进行转化
  2. var intToRoman = (num)=>{
  3. let res = '';
  4. const valueSymbols = [
  5. [1000, "M"],
  6. [900, "CM"],
  7. [500, "D"],
  8. [400, "CD"],
  9. [100, "C"],
  10. [90, "XC"],
  11. [50, "L"],
  12. [40, "XL"],
  13. [10, "X"],
  14. [9, "IX"],
  15. [5, "V"],
  16. [4, "IV"],
  17. [1, "I"],
  18. ];
  19. for([val,sym] of valueSymbols){
  20. if(num==0){
  21. return res;
  22. }
  23. while(num>=val){
  24. res+=sym;
  25. num-=val;
  26. }
  27. }
  28. return res;
  29. }

时间复杂度O(1)
空间复杂度O(1)

发表评论

表情:
评论列表 (有 0 条评论,227人围观)

还没有评论,来说两句吧...

相关阅读