gpt4 book ai didi

python - 编写一个递归函数,返回具有最长连续序列的数字

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:40 25 4
gpt4 key购买 nike

如何编写一个递归函数,它接受一个 int 值并返回具有最长连续序列的数字?

例如,f(1122333) 返回 3 而 f(1223) 返回 2

我不知道如何解决这个问题,总的来说我对递归有点陌生。

最佳答案

是这样的。未经测试。不过想想也很有趣。

伪代码:

(假设整数除法)

Def number helperLongest(number myNum): 
Return longest(myNum, -1, 0, -1, 0)

Def number longest(number myNum,number prevLongest, number numOfPrevLong, number currentLongest,number numOfLongest):
If (myNum/10 < 1) //base case
If (myNum == currentLongest)
numOfLongest++
Else //deal with corner case of < 10 input
If (numOfLongest > numOfPrevLong)
prevLongest = currentLongest
numOfPrevLongest = numOfLongest
currentLongest = myNum
numOfLongest = 1
return (numOfLongest>numOfPrevLong)?currentLongest:prevLongest
Else //recurse
if(myNum%10 == currentLongest)
numOfLongest++;
Else //have to break the chain
if (numOfLongest > numOfPrevLongest)
prevLongest = currentLongest
numOfPrevLongest = numOfLongest
currentLongest = myNum%10
numOfLongest = 1
myNewNum = myNum/10;
return longest(myNewNum,prevLongest,numOfPrevLong,currentLongest,numberOfLongest);

换言之:从末尾开始逐位遍历数字。如果当前的最后一位与它之前的一位匹配,则增加计数器。如果不是,并且大于之前的最大值,请保存它。将当前数字重置为当前最后一位数字并重置计数器。砍掉最后一个数字。将较小的数字和所有这些信息反馈到函数中,直到你得到最后一个数字(原始数字中的第一个数字)。将当前计数器与存储的最大值进行比较,并返回较大的值。

一个注意事项:如果出现平局,将返回匹配号码的第一个子串(实际上是原始号码中的最后一个子串)。如果需要其他行为,则将两个 >>= 互换。

关于python - 编写一个递归函数,返回具有最长连续序列的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29248065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com