ScriptOJ刷题总结

#98 判断两个矩形是否重叠
给我弄晕了都
思路理一理
首先在y轴,定x都为一样,观察图片,
ScriptOJ刷题总结_第1张图片
分别观察红线为b.y b.y+h与相邻蓝线的关系
可以发现所有的b.y跟下面的蓝线之间忽上忽下,没有规律,但是都比上面的蓝线的高度低
所有的b.y+h同理,都比下面的蓝线高
所以可以得到 当变量唯一时 当b.y<=a.y+h&&b.y+h>=a.y即可有交集
然后x轴同理

const isOverlap = (rect1, rect2) => {
    function compute (a, b) {
        if ( (b.x <= a.x + a.width && b.x + b.width>= a.x)&&
          (b.y <= a.y + a.height && b.y + b.height >= a.y)) {
            return true
        }
        return false
    }
    return compute(rect1, rect2) || compute(rect2, rect1)
}

#101 解析字串
做了好长时间不对
看看别人的 一开始也想到了正则表达式只是没实现 没想到这么简单
/:([^:\.]*)(?=\.)/g
这个正则表达式意为
/.../g全局匹配
再看里面的
: 匹配冒号
[]* 意为匹配[]里的表达式0~n次
^: 以冒号开头
\.不是.的字符
()辅获括号
?= 是一个先行断言 例如匹配'x'仅仅当'x'后面跟着'y'.这种叫做先行断言
?=\. 当后面是.时直接匹配前面这个
const extractStr = str => 
   (':.'+str)
   .match(/:([^:\.]*)(?=\.)/g)
   .splice(1)
   .map(x=>x.slice(1))
所以可以实现将:后的字符 直至 .前的所有字符全部匹配下来

接下来三天正则表达式练习~
87、
完成一个函数 isUSDFormat 返回 true/false 来判断一个字符串是否符合美元格式:
以 $ 开头
如果是小数,保留两位小数;如果不是小数则不显示小数部分
整数部分从小数点上一位开始每隔三位用 , 分割开来
如果整数部分从数字 0 开始,则只会显示一位 0
例如:

isUSDFormat('$1') // => true
isUSDFormat('$1.0') // => false
isUSDFormat('$100,000.00') // => true
isUSDFormat('$0,000.00') // => false
isUSDFormat('$0.00') // => true
isUSDFormat('$11,23,345.33') // => false
isUSDFormat('$1,123,345.33') // => true

初级菜鸟表示好难。。
const isUSDFormat = str => (/^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2})?$/).test(str)
看不懂,先听完课再来。。。

你可能感兴趣的:(ScriptOJ刷题总结)