美文网首页算法小屋
卢小七的刷题笔记(js)

卢小七的刷题笔记(js)

作者: 卢小七 | 来源:发表于2017-11-07 11:47 被阅读0次

    题目来源: Codewars

    题目: Coordinates Validator

    题目难度: 4kyu(理论上难,实际本题不是很难)

    You need to create a function that will validate if given parameters are valid geographical coordinates.

    Valid coordinates look like the following: "23.32353342, -32.543534534". The return value should be either true or false.

    Latitude (which is first float) can be between 0 and 90, positive or negative. Longitude (which is second float) can be between 0 and 180, positive or negative.

    Coordinates can only contain digits, or one of the following symbols (including space after comma) -, .

    There should be no space between the minus "-" sign and the digit after it.

    Here are some valid coordinates:

    . -23, 25
    . 24.53525235, 23.45235
    . 04, -23.234235
    . 43.91343345, 143
    . 4, -3
    

    And some invalid ones:

    . 23.234, - 23.4234
    . 2342.43536, 34.324236
    . N23.43345, E32.6457
    . 99.234, 12.324
    . 6.325624, 43.34345.345
    . 0, 1,2
    . 0.342q0832, 1.2324
    

    个人理解(其实不用翻译)

    寻找坐标集合,第一个为纬度,范围[-90,90];第二个为经度,范围[-180,180],如果是负的,负号与后面的数字没有空格,不允许出现字母.

    解法:要么从正面验证,要么从反面排除

    function isValidCoordinates(coordinates) {
        //以','分割后的长度不为2的排除
        if (coordinates.split(',').length != 2) {
            return false
        }
        //取出'纬度'和'精度'
        latitude = coordinates.split(',')[0]
        longitude = coordinates.split(',')[1]
        //'纬度'或'精度'中包含字母的排除
        if (latitude.search(/[a-zA-z]|' '/) >= 0 || longitude.search(/[a-zA-z]|' '/) >= 0) {
            return false
        }
        //取绝对值方便使用
        latitude = Math.abs(latitude)
        longitude = Math.abs(longitude)
        //超出范围的排除.在使用Math.abs后部分会出现NaN:
        //中间包含'-',' '的情形,也需要排除
        if (isNaN(latitude) || latitude > 90 || isNaN(longitude) || longitude > 180) {
            return false
        }
        return true;
    }
    

    再说几句: 做完也没认真去想,在查看了Codewars上网友的答案后,发现上述的排除过程除了最后一步,都是可以通过正则实现(最后一步也不会出现判断NaN的情况),实际最后只需要判断范围(未联系相关答案作者,所以没有贴出代码)

    正则表达式是个好东西!!!

    相关文章

      网友评论

        本文标题:卢小七的刷题笔记(js)

        本文链接:https://www.haomeiwen.com/subject/qnndmxtx.html