leetcode13.罗马数字转整数
题目描述见:https://leetcode.cn/problems/roman-to-integer/
解题如下:
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
/**
* 通常情况下,如 27 写做XXVII, 即为 XX + V + II 。
* 2个【特点】:
* 字符中间是【加】法;
* 并且【从大到小】排序。
*
* 特例情况下:如 4 不写做 IIII,而是 IV。题目中已罗列情况。
* 特点是:
* 【从小到大】做减法。
*
* 故本题的思路:
* 1、建立字典,7种罗马数字映射7个数; 或数组?或哈希表?(知识点:数组、字典、哈希表的区别与联系?)
* 2、罗马数字左>右做加法,左<右做减法。
* 经验总结:要注意思考归纳题目中每段条件的特点,题目本身是具有很强逻辑性的
*/
/**
* So how to create a dic in js?
* var dic = {a:1, b:2, c:3, d:4};
*/
var dic = {
I:1,
V:5,
X:10,
L:50,
C:100,
D:500,
M:1000
}; //此处知识点:js中字典用法
console.log("最初的字典元素:")
for(var key in dic){
console.log(key + dic[key]);
}//此处知识点:js调试
//题目保证s为有效的罗马数字,省略判定s是否有效
//此处学了知识点:
//js中变量声明:var
//js中String用法
//js中for循环用法:同c语言
//js中if用法:没有then;执行语句带{}
//思考by 1错误:p指向s最后一位时,p+1溢出
//js中或运算符:||
//js中比较运算符:==
var sum = 0;
for(var p = 0;p<s.length;p++){
var a = dic[s[p]]; //当前roman字符 对应的int
var b = dic[s[p+1]]; //下一个roman字符 对应的int
if(a>=b || p == s.length-1) {
sum = sum + a;
}
else{
sum = sum - a;
}
}
return sum; //哈哈,居然忘写return了,第1次执行出来是undefined。加上return就好了。
};
纪念一下第1次提交:
-----------------------------------------------------------------
第1次用js,第1次用leetcode,边学语法边刷题,所以注释比代码还多,哈哈。
本次仅作记录,
以后的题可能会分以下几个方面写:题目描述、解题思路、代码、知识点、经验总结。