12.整数转罗马数字
我的解法
感觉这题主要是理解题意,结合示例,从最高位开始向下判断即可。
对当前数字i和倍数mul:
如果为0,当前位无需附加字符,i++,mul/=10;
如果为4或9,用i*mul作为key在减法字典中查找字符,直接附加,i++,mul/=10;
如果不是4,9,0,检测可减去的最大值,然后减掉并附加字符(注意此时可以不用处理i和mul,因为在减去后,如果当前数字为0,那么在下一轮循环中自然会完成对i和mul的处理;如果当前数字不为0,那么还需要进行一轮循环,仍然不需要处理i和mul)。
官方解法
模拟方法与我的解法相似,官方没有对减法模式特别处理,而是与七个罗马数字合起来检测最大值,也是同样可以解决的。
方法二是硬编码,不同的位数和数字的组合,可以制作出一张编码表,于是可以根据num各位的数字来直接生成结果,感觉上算是内存换时间?
知识点
编码