最容易理解的划分数算法

这是划分数的常见解法

上面的解法我完全没有理解,怎么都没有理解怎么会想到这样去做递归,智商太低没办法。

但是没有关系,我还是绞尽脑汁想到了一种方法,即使常见的构建回溯树的方式。虽然消耗了些多余的空间,但是也算不错,代码简单有用。

当求 4的划分数时我是这样构建树的:(在只是画了两层,如下的树我们则可以用来遍历求和,如果和等于 4则划分数 +1)

 public class HuaFen{

       public int num; //需要划分的个数
       //n表示需要划分的值, m表示迭代到的层数,count表示当前的总和
       public  void  huaFen(int n,int m,int count){

          for( ; m<=n;m++){
               //如果大于了我们需要的值则往上走吧,不需要再往下走了
               System.out.println("count"+count);
              if(count+m>n ){
              }

              if(count+m==n ){
                  num++;
              }

              if(count+m<n){
                  huaFen(n,m,count+m);
              }
          }

      }

      public static void main(String args[]){

          HuaFen huan = new HuaFen();
          huan.huaFen(7,1,0);
          System.out.println(huan.num);
      }
  }
时间: 2024-10-29 19:09:45

最容易理解的划分数算法的相关文章

equals和HashCode深入理解以及Hash算法原理

equals()和HashCode()深入理解以及Hash算法原理 1.深入理解equals(): 在我的一篇博客"=="和.equals()的区别中向读者提出提醒: Object类中的equals方法和"=="是一样的,没有区别,即俩个对象的比较是比较他们的栈内存中存储的内存地址.而String类,Integer类等等一些类,是重写了equals方法,才使得equals和"==不同",他们比较的是值是不是相等.所以,当自己创建类时,自动继承了O

从零理解的KMP算法

KMP算法的优势 KMP算法是一个效率很高的字符串匹配算法,算法大意是:给定两个字符串y,x,判断x是否在y出现过.如果暴力搜索的话复杂度为O(lenx*leny),但用KMP算法解决的话, 我们只需要一个O(lenx)的预处理,优化暴力的复杂度变成O(lenx+leny),这里lenx,leny都代表字符串的长度. KMP算法的匹配方法 给定一个y为:ababacddsdfwwrababsababa 给定一个x为:ababa 我们先用暴力的方法跑一遍 1. ababacddsdfwwrabab

KMP算法,这是我看到的最简单的最好理解的KMP算法

看的文章来源于 http://www.cnblogs.com/c-cloud/p/3224788.html 好理解在求Next的方法(推荐看原文) Next实现 1 void makeNext(const char P[],int next[]) 2 { 3 int q,k;//q:模版字符串下标:k:最大前后缀长度 4 int m = strlen(P);//模版字符串长度 5 next[0] = 0;//模版字符串的第一个字符的最大前后缀长度为0 6 for (q = 1,k = 0; q

『cs231n』作业1问题1选讲_通过代码理解K近邻算法&amp;交叉验证选择超参数参数

通过K近邻算法探究numpy向量运算提速 茴香豆的"茴"字有... ... 使用三种计算图片距离的方式实现K近邻算法: 1.最为基础的双循环 2.利用numpy的broadca机制实现单循环 3.利用broadcast和矩阵的数学性质实现无循环 图片被拉伸为一维数组 X_train:(train_num, 一维数组) X:(test_num, 一维数组) 方法验证 import numpy as np a = np.array([[1,1,1],[2,2,2],[3,3,3]]) b

[理论篇]深度理解Powell优化算法

1.鲍威尔优化法综述 鲍威尔法又称方向加速法,它由Powell于1964年提出,是利用共轭方向可以加快收敛速度的性质形成的一种搜索方法.该方法不需要对目标函数进行求导,当目标函数的导数不连续的时候也能应用,因此,鲍威尔算法是一种十分有效的直接搜索法. Powell法可用于求解一般无约束优化问题,对于维数n<20的目标函数求优化问题,此法可获得较满意的结果. 不同于其他的直接法,Powell法有一套完整的理论体系,故其计算效率高于其他直接法.该方法使用一维搜索,而不是跳跃的探测步.同时,Powel

非常好理解的KNN算法示例

参考链接:https://www.joinquant.com/post/2227?f=study&m=math:一只兔子帮你理解KNN https://www.joinquant.com/post/2627?f=study&m=math:kd 树算法之思路篇 https://www.joinquant.com/post/2843?f=study&m=math;kd 树算法之详细篇

架构师维度理解 程序=数据+算法

程序=数据+算法 可以用更简单的话说: 程序= 数据+行为. 数据:  数据的组织,1对1,1对多. 复杂的程序要=N 个程序有序组织=N 个(数据+行为) 核心:           1 .对数据的认知和拆分. 2.对行为的组织. (从效率角度扩大支撑模块的外延,将支撑模块外延成业务模块,或者分层两层. 存储层+业务层. 费用模块是个很典型的案例) 一开始费用模块只是存储用,对外支撑使用. 后来新增一个费用项目.所有流程都要变更,上线,或者说通知. 后来干脆将这个支撑模块外延.

MySQL学习随笔--通过实例理解merge ,temptable算法的差异

实例1 使用视图的两种算法merge和temptable分别统计 表tb_phone中market_price大于4000的手机,然后查询视图查找出小于6000的手机 简单总结最终获取的结果:查询出market_price大于4000且小于6000的手机 表数据: merge合并算法 合并的执行方式,每当执行的时候,先将视图的sql语句与外部查询视图的sql语句,合并在一起,最终执行. 以下是使用常规select语句模拟合并算法: 执行结果模拟与算法的结果相同: temptable临时表算法 先

09-看图理解数据结构与算法系列(B树)

B树 B树即平衡查找树,一般理解为平衡多路查找树,也称为B-树.B_树.是一种自平衡树状数据结构,能对存储的数据进行O(log n)的时间复杂度进行查找.插入和删除.B树一般较多用在存储系统上,比如数据库或文件系统. B树特点 B树可以定义一个m值作为预定范围,即m路(阶)B树. 每个节点最多有m个孩子. 每个节点至少有ceil(m/2)个孩子,除了根节点和叶子节点外. 对于根节点,子树个数范围为[2,m],节点内值的个数范围为[1,m-1]. 对于非根节点,节点内的值个数范围为[ceil(m/