涉及题目
118-杨辉三角-简单、119-杨辉三角II-简单、661-图片平滑器-简单、598-范围求和II-简单、419-甲板上的战舰-中等
总结
- 这一部分的题目,倾向于寻找一定的规律去解答,有一部分使用暴力法是会超出题目限制的;另外,在操作数组的过程中,一定要把数组边界的问题考虑到位,避免出现数组越界的低级错误。
- 对于杨辉三角,有一个规律总结:第k行的数字可以由第k-1行的数字与第k-1行的数字向后错一位求和得到。还有一个公式:排列公式,推导为递推公式为,k+1位置的值为k位置值的(n-k)/(k+1)倍。
- 对于119,题解中有提到,由于只需要提供第k行的list,因此,可以结合递推公式的思路,通过公用List,减少空间利用。
- 需要注意,在以上使用递推公式的时候,需要将第k-1行的数据强转为long类型。
- 对于598,如果暴力的话,是会超出内存限制的,因此,需要去寻找规律:根据题意,最大的一组数字一定是集中在左上角的,那么只需要确定在op操作数组的最小操作范围即可。
- 对于419,题目本身就有一定的理解难度。给出的矩阵中’X’可以看作是战舰的一部分组件,根据给出的矩阵,计算这些组件可以组成满足以下条件的战舰数目:
- 形成一艘战舰的组件必须来自1列n行或者1行n列
- 隶属于不同战舰的组件之间一定要有间隔(空位,即’.’)。另外需要注意的是,题目说明,不会给出错误用例,也就是说隶属于不同战舰的组件之间是一定存在空位的。
因此,直接去判断处于’X’位置的右侧或者下侧是否有与其连接的’X’,如果有的话,认为它们来自同一搜战舰,改为空位,只计数一次。
Java补充
- list的add方法,虽然可以指定index,但是index必须是处在list的size范围内,相当于此时的add方法是一个插入操作。比如:一个空的list,
list.add(0,1)
之后,list.add(2,5)
,这样是错误的使用方法,因为目前list的size仅为1。