算法
文章平均质量分 57
爱学习的小仙女!
这个作者很懒,什么都没留下…
展开
-
力扣70 爬楼梯 C语言 动态规划 递归
爬 0 层和爬 1 层都只有一种情况, 但是爬两层有两种:一次爬一层一共爬两次、一次爬两层一共爬一次,爬三层有三种:一次爬一层一共爬三次、先爬一层再爬两层一共爬两次、先爬两层再爬一层一共爬两次。所以 f(0) = 1, f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5。规律是 f(n) = f(n-1) + f(n-2),因为爬到第 n 阶有两种情况,分别是站在第 n-1 阶爬一层和站在第 n-2 阶爬两层,所以就是 f(n-1) 和 f(n-2)的和。有两种方法可以爬到楼顶。原创 2024-05-07 10:32:58 · 460 阅读 · 0 评论 -
力扣69 x的平方根 二分查找求平方根 C语言
从评论里看到一位大佬用的二分查找,自己想不到这样做,记录一下。其中判断 x 是否大于等于mid的平方时,用的是 x/mid >= mid,这样来防止溢出。8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。原创 2024-05-06 09:33:03 · 337 阅读 · 0 评论 -
欧拉函数确定1-n有多少个数和 n 互质详解 附C语言代码 蓝桥杯互质数的个数
我们已知30 = 2*3*5,那么1-30中有多少个数与30互质就可以通过减去不和30互质的数得到,既然2、 3、 5不是,那他们的倍数也就不是,所以要减去 30/2、 30/3、 30/5,但是减的时候多减掉了2和3的公倍数、3和5的公倍数、2和5的公倍数,所以要再加上,就相当于有三个圆,两两相交,中间有一部分是三个圆重叠,所以还要再减去30/(2*3*5),最后整理一下就是 上面的式子了。例如 8 = 2*2*2, 171 = 3*3*19, 30 = 2*3*5, 19 = 19。原创 2024-04-06 15:13:52 · 461 阅读 · 0 评论 -
DFS 全排列问题 C语言代码
关键在于进入dfs之后首先要判断是否达到停止条件,没有的话就要考虑对当前这个结点做什么,做完之后要继续下一层的 dfs ,下一层结束后要把当前结点的标志重新标为0。在main()函数中调用 dfs()时,括号里的参数是开始的层数,如 dfs(0) 指的是从第0层开始,而 dfs(1) 指深度为1的情况,这时候也就是有两个数排列好了。是一种遍历算法,尽可能深地向子树中的结点搜索,直到达到一定的深度,再回溯到上层的结点,继续搜索未被访问的结点。给定 4 个数 1 2 3 4,求他们所有可能的排列结果。原创 2024-04-03 14:29:39 · 866 阅读 · 0 评论 -
动态规划数组连乘问题 详细过程+有注释的C代码
一个矩阵的列数等于另一个矩阵的行数,两个矩阵可以相乘。例如,一个 1×2的矩阵A 和一个 2×3的矩阵B相乘,得到一个1×3的矩阵,运算次数为1×2×3=6,同理,一个4×10的矩阵和一个10×35的矩阵相乘,运算次数为4×10×35=1400。多个矩阵相乘时,运算顺序不同,需要的运算次数也不同。原创 2023-10-31 14:56:55 · 710 阅读 · 1 评论