点击蓝字“视学算法”关注我哟
加个“星标★”,每日好文必达!
阿广 · 一个会讲段子的科学探索者
1、巧用数组下标
比如做一个存储汉字数字的数组,可以:
这样当需要取出“二”的时候,只需要:
再比如,定义一个学生有两个属性:
那么数组a存储学生的信息可以这样提取:
2、两重循环的简化
row=i(从1到M)
col=j(从1到N)
i从1到M*N
row = i/M
col = i%N
其中i/M表示i除以M的整数部分,i%N表示i除以N的余数。
对于棋盘/迷宫/图像/二维空间,往往都需要针对于某个点进行四个方向或者8个方向的搜索。
如果向上搜索
则...
如果向下搜索
则...
如果向左搜索
则...
如果向右搜索
则...
a=[(0,1),(0,-1),(-1,0),(1,0)]
i从0到4-1
新坐标=当前坐标+a
tail=(tail+1)%N
这样就把数组下标全部都统一了,这就叫做代码的一致性处理。
例如阿拉伯数字转换成汉字数字时,有一个需要注意的地方,那就是需要使用“万”“亿”这样的单位,但也不全是,如果不超过1w的数字,就没有单位。
所以这样定义:
这样,每个位置就用数组往上加单位即可,小于1w的数字加的单位就是“”(空的),这就是一致性处理,根本不需要再判断数字是否大于1w的。
有些时候在一些循环中,我们需要反复进行一些计算得到一系列的数,再去使用,这样的计算量非常的大!
我们可以分为两步进行:
1、将计算完成并把结果存储到一个数组中
2、在循环中如果用到这些结果,再去查询即可
原结构:- 如果条件1:
- 则动作1;
- 如果条件2:
- 则动作2;
- 如果条件3:
- 则动作3;
复制代码
函数(i)=动作i
i从1到end循环
如果 条件==条件(i)
则动作=动作(i)
|