leetcode-Easy-第5期-Roman to Integer

作者 : 开心源码 本文共1102个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共203人阅读

题目: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

发表回复