D13938.CountandSay题目链接38.CountandSay题目分析这道题有点斐波那契数列:从数字1开始,因为有11,记为“11”;第二种,将上面的“11”“转换”成文本,即:两个1,记录为“21”;以此类推,第三个为12、11,记为“1211”;继续,11,12,21,111221;继续,31,22,11,312211;继续,13112221;继续,1113213111;我现在应该明白了吧?为什么它像斐波那契数列,因为下一个结果与上一个结果有关。题目会给出一个数字n,返回第n个数字对应的读音。即上述列表的序号为n,“记为”的部分要退回。由于解题思路就像斐波那契数列,所以必须要用到递归。递归套娃有两个特点不能忘记:从头到尾,从头到尾,你自己调整。如果你想在自己的娃娃中放入另一个娃娃,你必须有一个终止条件。需要先写终止条件,否则会出现无限套娃。他给出一个数字n之后,我们需要知道前面的数字是多少,所以我们需要先调用自己。调用自身时,参数需要n-1。如果传入的是数字1,那么我们要返回的就是数字1,也就是字符串1。因为我们没有处理数字的概念,所以不能返回“1”对应的数字“11”1”。那么,得到数字1之后,要想得到它的思路,就需要知道元素的个数和元素的内容。穿越是跑不掉的。如果当前数与之前的数相同,那么我们要数数。当与前数不同时,停止数数,将思绪拼接成最后思绪的末尾。由于第一个数字没有“前一个数字”,所以先记录为NULL。只有前面的数字不为NULL,idea才拼接到最终idea的末尾。最终代码countAndSay($n-1);$arr=str_split($str);$计数=[];$prev=NULL;$计数=0;foreach($arras$key=>$val){if($val==$prev){$count++;}else{if(!is_null($prev)){$counts[]=$count.$prev;}$prev=$val;$计数=1;}}$counts[]=$count.$prev;返回内爆($counts);}}如果您觉得本文对您有用,欢迎使用爱根贷进行资助。
