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,边学语法边刷题,所以注释比代码还多,哈哈。

本次仅作记录,

以后的题可能会分以下几个方面写:题目描述、解题思路、代码、知识点、经验总结。

 

posted @ 2022-05-10 17:36  王小丸  阅读(26)  评论(0编辑  收藏  举报