FCC 中级算法题 罗马数字转换器
Posted lailailee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FCC 中级算法题 罗马数字转换器相关的知识,希望对你有一定的参考价值。
Roman Numeral Converter
将给定的数字转换成罗马数字。
所有返回的 罗马数字 都应该是大写形式。
Roman Numerals思路:
(1)把所给的数字拆分成数组;
(2)将其倒序之后利用索引与元素的关系将其转化为罗马字符(可以不倒序,不过就有些麻烦了);
(3) 再把它倒回来,然后合并,就是原来数字的罗马数字表现。
知识点:
(1)array=string.split(‘‘);
split()方法将一个
String
对象分割成字符串数组,通过
将字符串分成子串。
1 var numString = "‘" + num + "‘"; 2 arr = numString.split("");
(2)array.splice(start,deleteCount,item1,item2,...);
splice()
方法通过删除现有元素和/或添加新元素来更改一个数组的内容;
1 arr.splice(0, 1); 2 arr.splice(arr.length - 1, 1);
(3)string = array.join("");
join()
方法将数组(或一个类数组对象)的所有元素连接到一个字符串中。
失误点:
这道题困了我三个小时,太特么蛋疼了!
因为一开始通过split方法产生的数组里的数字已经变成了字符型,而我的case 里面的匹配值还都是整形,所以用数字测试没问题,
一上arr[k]就没有结果,后来就都给case里的数字加了引号,大功告成!
1 function changeRoman(k) { 2 3 var I, V, X; 4 if (k === 0) { 5 (I = "I"), (V = "V"), (X = "X"); 6 } else if (k === 1) { 7 (I = "X"), (V = "L"), (X = "C"); 8 } else if (k === 2) { 9 (I = "C"), (V = "D"), (X = "M"); 10 } 11 var roman = ""; 12 var idx = arr[k]; 13 switch (idx) { 14 case "1": 15 roman = I; 16 break; 17 case "2": 18 roman = I + I; 19 break; 20 case "3": 21 roman = I + I + I; 22 break; 23 case "4": 24 roman = I + V; 25 26 break; 27 case "5": 28 roman = V; 29 break; 30 case "6": 31 roman = V + I; 32 break; 33 case "7": 34 roman = V + I + I; 35 break; 36 case "8": 37 roman = V + I + I + I; 38 break; 39 case "9": 40 roman = I + X; 41 break; 42 } 43 arr.splice(k, 1, roman); 44 }
总代码:
1 function convert(num) { 2 var arr = []; 3 var numString = "‘" + num + "‘"; 4 arr = numString.split(""); 5 arr.splice(0, 1); 6 arr.splice(arr.length - 1, 1); 7 arr.reverse(); 8 9 function changeRoman(k) { 10 11 var I, V, X; 12 if (k === 0) { 13 (I = "I"), (V = "V"), (X = "X"); 14 } else if (k === 1) { 15 (I = "X"), (V = "L"), (X = "C"); 16 } else if (k === 2) { 17 (I = "C"), (V = "D"), (X = "M"); 18 } 19 var roman = ""; 20 var idx = arr[k]; 21 switch (idx) { 22 case "1": 23 roman = I; 24 break; 25 case "2": 26 roman = I + I; 27 break; 28 case "3": 29 roman = I + I + I; 30 break; 31 case "4": 32 roman = I + V; 33 34 break; 35 case "5": 36 roman = V; 37 break; 38 case "6": 39 roman = V + I; 40 break; 41 case "7": 42 roman = V + I + I; 43 break; 44 case "8": 45 roman = V + I + I + I; 46 break; 47 case "9": 48 roman = I + X; 49 break; 50 } 51 arr.splice(k, 1, roman); 52 } 53 54 function changeRoman1(k) { 55 var roman = ""; 56 var idx = arr[k]; 57 for (var p = 0; p < idx; p++) { 58 roman = roman + "M"; 59 } 60 arr.splice(k, 1, roman); 61 } 62 if (arr.length < 4) { 63 for (var k = 0; k < arr.length; k++) { 64 changeRoman(k); 65 } 66 } else if (arr.length == 4) { 67 for (var l = 0; l < 3; l++) { 68 changeRoman(l); 69 } 70 changeRoman1(3); 71 } 72 arr.reverse(); 73 arr = arr.join(""); 74 return arr; 75 } 76 77 convert(3612);
以上是关于FCC 中级算法题 罗马数字转换器的主要内容,如果未能解决你的问题,请参考以下文章