Leetcode 12、13:整数转罗马数字-罗马数字转整数

自己从0到1的思路,仅供参考:

整数转罗马数字

// 整数转罗马数字
function intToRoman(num) {
  if (num <= 10) {
    return unit(num)
  } else if(num <= 100) {
    return unit2(num)
  } else if (num <= 1000) {
    return unit3(num)
  } else if (num > 1000) {
    return unit4(num)
  }
}

function unit(num) {
  let I = 'I'
  let V = 'V'
  let X = 'X'
  let result = ''

  if (num <= 3) {
    for (let i = 0; i < num; i++) {
      result += I
    }
  } else if (num === 4) {
    result = I + V
  } else if (num === 5) {
    result = V
  } else if (num > 5 && num < 9) {
    result = V
    for (let i = 0; i < num - 5; i++) {
      result += I
    }
  } else if (num === 9) {
    result = I + X
  } else if (num === 10) {
    result = X
  }
  return result
}

function unit2(num) {
  let X = 'X'
  let L = 'L'
  let C = 'C'
  let result = ''

  if (num < 40) {
    for (let i = 0; i < Math.floor(num / 10); i++) {
      result += X
    }
    if (num % 10) {
      result += unit(num % 10)
    }

  } else if (num >= 40 && num < 50) {
    result = X + L
    result += unit(num - 40)

  } else if (num === 50) {
    result = L
  } else if (num > 50 && num < 90) {
    result = L
    for (let i = 0; i < Math.floor((num - 50) / 10); i++) {
      result += X
    }
    if (num % 10) {
      result += unit(num % 10)
    }
  } else if (num >= 90 && num < 100) {
    result = X + C
    result += unit(num - 90)

  } else if (num === 100) {
    result = C
  }

  return result
}

function unit3(num) {
  let C = 'C'
  let D = 'D'
  let M = 'M'
  let result = ''

  if (num < 400) {
    for (let i = 0; i < Math.floor(num / 100); i++) {
      result += C
    }
    if (num % 100) {
      result += unit2(num % 100)
    }

  } else if (num >= 400 && num < 500) {
    result = C + D
    result += unit2(num - 400)

  } else if (num === 500) {
    result = D
  } else if (num > 500 && num < 900) {
    result = D
    for (let i = 0; i < Math.floor((num - 500) / 100); i++) {
      result += C
    }
    if (num % 100) {
      result += unit2(num % 100)
    }
  } else if (num >= 900 && num < 1000) {
    result = C + M
    result += unit2(num - 900)

  } else if (num === 1000) {
    result = M
  }

  return result
}

function unit4(num) {
  let M = 'M'
  let result = ''

    for (let i = 0; i < Math.floor(num / 1000); i++) {
      result += M
    }

    if (num % 1000) {
      result += unit3(num % 1000)
    }

  return result
}

罗马数字转整数

// 罗马数字转整数
let I = 'I'
let V = 'V'
let X = 'X'
let L = 'L'
let C = 'C'
let D = 'D'
let M = 'M'

function romanToInt(s) {
  let result = 0

  if (s[0] === I) {
    result = unit1(s)

  } else if (s[0] === V) {
    result = unit2(s)

  } else if (s[0] === X) { //
    result = unit3(s)

  } else if (s[0] === L) {
    result = unit4(s)

  } else if (s[0] === C) {
    result = unit5(s)

  } else if (s[0] === D) {
    result = unit6(s)
    
  } else if (s[0] === M) {
    result = unit7(s)
  }
  
  console.log(result)
  return result
}

// I
function unit1(s) {
  let result = 0
  if (s.length <=3 && s[1] !== V && s[1] !== X){
    result = s.length
  } else if (s.length === 2 && s[1] === V) {
    result = 4
  } else if (s.length === 2 && s[1] === X) {
    result = 9
  }
  return result
}

// V
function unit2(s){
  let result = 0
  result = 5 + (s.length -1)
  return result
}

// X
function unit3(s) {
  let result = 0 

  let second = s.slice(1)
  let third = s.slice(2)

  if (s[1] === I) {
    return unit1(second) + 10
  } else if (s[1] === V) {
    return unit2(second) + 10
  } else if (s[0] === X && s[1] !== L && s[1] !== C) {
    return unit3(second) + 10
  }

  if (s[1] === L) {
    result = 40
    if (s[2] === I) {
      result += unit1(third)
    } else if (s[2] === V) {
      result += unit2(third)
    }
  } else if (s[1] === C) {
    result = 90

    if (s[2] === I) {
      result += unit1(third)
    } else if (s[2] === V) {
      result += unit2(third)
    }
  }
  return result
}

// L
function unit4(s){
  let result = 0
  let second = s.slice(1)
  if (s[1] === I) {
    return unit1(second) + 50
  } else if (s[1] === V) {
    return unit2(second) + 50
  } else if (s[1] === X) {
    console.log('l', unit3(second),second)
    return unit3(second) + 50
  }

  result = 50 + (s.length -1) * 10
  return result
}

// C
function unit5(s){
  let result = 0
  let second = s.slice(1)
  let third = s.slice(2)
  if (s[1] === I) {
    return unit1(second) + 100
  } else if (s[1] === V) {
    return unit2(second) + 100
  } else if (s[1] === X) {
    return unit3(second) + 100
  } else if (s[1] === L) {
    return unit4(second) + 100
  } 
  else if (s[0] === C && s[1] !== D && s[1] !== M) {
    return unit5(second) + 100
  }

  if (s[1] === D) {
    result = 400
    if (s[2] === I) {
      result += unit1(third)
    } else if (s[2] === V) {
      result += unit2(third)
    } else if (s[2] === X) {
      result += unit3(third)
    } else if (s[2] === L) {
      result += unit4(third)
    } 
  } else if (s[1] === M) {
    result = 900

    if (s[2] === I) {
      result += unit1(third)
    } else if (s[2] === V) {
      result += unit2(third)
    } else if (s[2] === X) {
      result += unit3(third)
    } else if (s[2] === L) {
      result += unit4(third)
    }
  }

  return result
}

// D
function unit6(s){
  let result = 0
  let second = s.slice(1)
  if (s[1] === I) {
    return unit1(second) + 500
  } else if (s[1] === V) {
    return unit2(second) + 500
  } else if (s[1] === X) {
    return unit3(second) + 500
  } else if (s[1] === L) {
    return unit4(second) + 500
  } else if (s[1] === C) {
    return unit5(second) + 500
  }

  result = 500 + (s.length -1) * 100
  return result
}

// M
function unit7(s){
  let result = 0
  let second = s.slice(1)

  if (s[1] === I) {
    return unit1(second) + 1000
  } else if (s[1] === V) {
    return unit2(second) + 1000
  } else if (s[1] === X) {
    return unit3(second) + 1000
  } else if (s[1] === L) {
    return unit4(second) + 1000
  } else if (s[1] === C) {
    return unit5(second) + 1000
  } else if (s[1] === D) {
    return unit6(second) + 1000
  } else if (s[0] === M) {
    return unit7(second) + 1000
  } 
  return result
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值