蓝桥杯笔记:
阶乘计算
N! 后面恰好有几个0,就拿N一直除以5知道N<0,然后得到的值加一起,
例如:后面有两个0 就是
10/5=2 2/5=0 2+0=2 so 10! 后面有两个0
40/5=8 8/5=1 8+1=9 so 40! 后面有九个0
int 2* 32 >10*9
long 2* 64>10*18
eclipse 代码补全 alt + /
求最大公约数以及最小公倍数
public class LCM {
// 计算最大公约数的方法
public static int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 计算最小公倍数的方法
public static int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
public static void main(String[] args) {
int a = 12;
int b = 15;
int lcmResult = lcm(a, b);
}
}
BFS算法框架
// 计算从起点 start 到终点 target 的最近距离
int BFS(Node start, Node target) {
Queue<Node> q; // 核心数据结构
Set<Node> visited; // 避免走回头路
q.offer(start); // 将起点加入队列
visited.add(start);
while (q not empty) {
int sz = q.size();
/* 将当前队列中的所有节点向四周扩散 */
for (int i = 0; i < sz; i++) {
Node cur = q.poll();
/* 划重点:这里判断是否到达终点 */
if (cur is target)
return step;
/* 将 cur 的相邻节点加入队列 */
for (Node x : cur.adj()) {
if (x not in visited) {
q.offer(x);
visited.add(x);
}
}
}
}
// 如果走到这里,说明在图中没有找到目标节点
}//bfs先找到的一定是最短
dfs/回溯算法框架
回溯算法看labuladong总结组合和排序
result = []
def backtrack(路径, 选择列表):
if 满足结束条件