leetcode-Easy-第5期-Roman to Integer
题目:Roman to Integer
- 例子
Symbol ValueI 1V 5X 10L 50C 100D 500M 1000
- Example 1:
Input: "III"Output: 3
- Example 2:
Input: "IV"Output: 4 // V-I = 5-1=4
- Example 3:
Input: "IX"Output: 9Example 4:
- Example 4
Input: "LVIII"Output: 58Explanation: L = 50, V= 5, III = 3.
- Example 5:
Input: "MCMXCIV"Output: 1994Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
const romantic = (value) => { const obj = { I:1, V:5, X: 10, L: 50, C: 100, D: 500, M: 1000 } const arr = value.toUpperCase().split('') const numberArr = arr.map(item => obj[item]) console.log(numberArr) let count = 0 const len = numberArr.length for(let i=0;i<len;i++){ console.log(i) if( numberArr[i]<numberArr[i+1]){ // 出现左边比右边小,当前的加数应该大减小的值 count+=numberArr[i+1]-numberArr[i] // 左边比右边小,累加的值是大的减小的,这个两项的值已经加进去了, // 所以下一个累加的项是i+2 i = i+1 //这里 i+1,是由于,上面i++还会把i再次加1 }else { count += numberArr[i] } } return count}const res = romantic("MCMXCIV") //1994
分析
"MCMXCIV" 变成数组:[1000,100,1000,10,100,1,5]正常取值: 1000+100+1000+10+100+1+5本题规则: 1 1000 > 100,count = 10002 100 < 1000,count = 1000 + (1000-100) = 1900 // 3 10 < 100, count = 1900 + (100-10) =19904 1 < 5, count = 1990 + (5-1) = 1994//分析第2步起因,假如左边的值小于相邻右边的值,就不能直接将二者累加,而是只取大减小的差//并且一次性消耗掉2个数值的值// 由于第2为100小于第3位1000,所以原本应该 count + 100 + 1000//变成了count + (1000-100) ,一次性消耗掉第2和第3位的数字,其他同理
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » leetcode-Easy-第5期-Roman to Integer
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » leetcode-Easy-第5期-Roman to Integer