FCC 中级算法题 罗马数字转换器
Roman Numeral Converter
将给定的数字转换成罗马数字。
所有返回的 罗马数字 都应该是大写形式。
Roman Numerals
Array.splice()
Array.indexOf()
Array.join()
思路:
(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);
转载于:https://www.cnblogs.com/lailailee/p/7269400.html
FCC 中级算法题 罗马数字转换器相关推荐
- FCC 中级算法题 Where art thou
Where art thou 写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组.如果返回的数组中包含 source 对象的属性- ...
- FCC 中级算法题 所有素数之和
Sum All Primes 求小于等于给定数值的质数之和. 只有 1 和它本身两个约数的数叫质数.例如,2 是质数,因为它只能被 1 和 2 整除.1 不是质数,因为它只能被自身整除. 给定的数不一 ...
- 算法题---罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I : 1 V : 5 X : 10 L : 50 C : 100 D : 500 M : 1000 例如, 罗马数字 ...
- 每天一道算法题系列十二之整数转罗马数字
每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/integer-to-roman/ 来源是力扣,大家喜欢可以去力扣中文 ...
- JAVA 判断简单密码算法_十道简单算法题二【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- FreeCodeCamp 中级算法(个人向)
freecodecamp 中级算法地址戳这里 Sum All Numbers in a Range 我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 1 function ...
- python 数组赋值_LeetCode基础算法题第182篇:一维数组的运行总和
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完.目前我选择C语言,Python和Java作为实现语言,因为这三种语 ...
- 算法题+JVM+自定义View,详细的Android学习指南
前言 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 学算法真的很痛苦,虽然大数据现在很火,但找到适合自己定位的职业也未尝不是一种合理选择. ...
- 交互式图表_如何构建罗马数字转换器和交互式罗马数字图表
交互式图表 The Roman numerals are no longer an essential part of our daily lives. But we do use them when ...
最新文章
- 解决win7系统中安装sql server 2005客户端报错问题
- c++ 3.变量定义
- 从概念到案例,机器学习应该掌握的20个知识点
- Java面向对象编程篇5——枚举
- c++使用单向链表存储一组有序数据_数据结构笔试题基础
- 很想去的地方面试没过_我们研究了学生在技术面试中的表现。 他们上学的地方没关系。...
- java 工厂模式详解_Java设计模式之工厂模式详解
- Django 2.0 学习(12):Django 模板语法
- 《西游记》中九尾狐狸为什么有太上老君的幌金绳?
- DevExpress v18.1新版亮点——WinForms篇(六)
- Android开发系列(十七):读取assets文件夹下的数据库文件
- css3为图片添加鼠标移入放大效果
- 如何查看磁盘分区情况
- Daily Scrum 10.31
- CSS3+JS制作的一款图标任意拖动,并且可以放在文件夹中
- linux i3 桌面,Linux 桌面平铺管理器 - i3wm
- 20182319《数据结构与面向对象程序设计》实验二报告
- Java poi 表格居中
- 阿里国际站各数据更新时间汇总
- 「Android高级工程师」BAT大厂面试基础题集合-下 Github标星6.5K
热门文章
- 使用Visual Studio编译Qt项目出现“E1696 无法打开Qt源文件”的解决方案,亲测可行
- prop-types详解
- 三维数据可视化软件html5,基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型 | 3D组态|图扑软件|数据可视化|blog...
- 华硕笔记本电脑重装系统后不能读取usb,不能上网
- 445、Java框架99 -【MyBatis - 多对多】 2020.12.23
- Unity3d中UGUI组件精简复盘(十八)Aspect Ratio Fitter组件
- 2022-11-26 linux 通过blocking_notifier_chain_register、blocking_notifier_call_chain 接收温度变化信息控制风扇
- 【数据分析案例】从微信接龙中随机选择k名人员出席
- 一只小白,在学习delphi.感觉很吃力。。
- Pluck Cms文件上传结合命令执行复现