萌新深夜写一篇有关于深度优先的博客,萌新刚刚走进IT大门,简直毫无技术可言,说的不对的请指教。
所谓深度优先,我的理解它是离不开递归的,而递归这种神才用的东西,想必要把它捋顺还是很可怕的一件事,就好比大学刚开始学C语言老师给我们玩一个汉诺塔的游戏,总的来说,递归是不需要真正捋清楚里面的每一层是怎么实现的,你只需要知道 “当下应该如何思考 ”,而不需要考虑“下一步是如何做到的”。
比如在这里我介绍一个深度优先的例子:假如有编号为1-9的卡片和编号为1-9的盒子,现在需要将这九张卡片分别放入9个盒子中,并且每个盒子有且只有一张卡片,那么一共有多少种放法呢?并且告诉我所有的放法?
是不是咋一看好像并不是很难,这里深夜先介绍一种大神的算法,首先9张卡片放到9个盒子实际上就是对一个不重复的九位数进行排列,这是不是和小学初中学的那种排列方式差不多呢,接下来我们要找规律了,9个数字的排列组合如何才是重复的呢?这里我们用到了字符串的分割的方法(Split),将123456789当成一个不重复的九位数,那么
string str="123456789";
将str按这个字符串中的每一个字符来分割的话,所得到的字符串的数量应该是2,当然前提是这个九位数是不重复的,如果重复会出现什么结果呢,比如:
string str1="123456589";
按5来分割的话会得到蓝色区域的部分,也就是分割后的长度为3,这就是重复和不重复的区别了,