算法

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值

I 1

V 5

X 10

L 50

C 100

D 500

M 1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。

C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

示例 1:

输入: 3

输出: “III”

示例 2:

输入: 4

输出: “IV”

示例 3:

输入: 9

输出: “IX”

示例 4:

输入: 58

输出: “LVIII”

解释: L = 50, V = 5, III = 3.

示例 5:

输入: 1994

输出: “MCMXCIV”

解释: M = 1000, CM = 900, XC = 90, IV = 4.

leet code链接

解决方案

  1. /**
  2. * @param {number} num
  3. * @return {string}
  4. */
  5. var intToRoman = function(num) {
  6. const lookup = {
  7. M: 1000,
  8. CM: 900,
  9. D: 500,
  10. CD: 400,
  11. C: 100,
  12. XC: 90,
  13. L: 50,
  14. XL: 40,
  15. X: 10,
  16. IX: 9,
  17. V: 5,
  18. IV: 4,
  19. I: 1
  20. }
  21. let romanStr = ''
  22. for (let i in lookup) {
  23. while (num >= lookup[i]) {
  24. romanStr += i
  25. num -= lookup[i]
  26. }
  27. }
  28. return romanStr
  29. }

将特殊罗马数字表示也列在对象中,然后比对当前的数字和对象中的数字如果大于就相应的减去当前的数值,罗马数字增加相应的符号。

Review

这周review的文章是耗子叔推荐的 如何提高你的编码能力 - The Key To Accelerating Your Coding Skills

Tips

本周探索了骨架屏,但迫于项目日期紧张,来不及调研将其应用到项目中,只能暂缓,后期测试的时候调研下这个问题。
然后为项目添加了两个插件,toast和loading,这是H5项目中经常用到的,但一般都会使用样式库来解决这些网络请求加载的样式问题,但如果一个小小的项目,要引入一个样式库,有点不太必要,所以就自己写了。文章还需要后续整理。

Share

自从开始ARTS之后,前一两周都是提前完成,后边这几周总是一拖再拖,直到周日的晚上才开始写。我也在思考为什么非要拖到最后一刻,有什么办法把这项任务在一周之内的几天完成呢?

我能想的办法就是提前确定好要做的算法题、要review的文章、要总结的tips,然后在工作日中午或者下班之后开始一个个的去完成,有些工作可能要分两天去完成,那也没有关系,这样就把一周的工作平均在每一天,也不用到最后一天才急急忙忙的把这些工作完成。

提前确定好要做的事情,心里面有个预期,就能合理的安排好时间去做。一直说管理好自己的时间,事实上如果把每一件事情都安排好,时间自然而然的就有了,管理时间实质上是管事。

下周实践,看有没有用😝