我在递归方面遇到了一些问题,为了理解它,我试图为自己提出问题并解决它们。这个特殊的问题让我很困惑: 将此视为字符串形式的输入:
[[a,b,c],[[d]],[[e,f]],[g],h,i,[[j,[k,l]]]]
目标是找到列表中事物的总数并列出它们本身。对于此示例,结果将是:12
+10
= 22
请注意,输入不是数组,而是字符串。也可以代替 a
,b
,...
任何东西都可以使用,比如数字、字符串等
[12345,0.34,["afv",24]]
这是我的想法,但我会提到为什么我无法实现它:
我们编写一个开始迭代字符串的函数。它应该计算 [
和 ]
之间的总数。每当函数到达 [
时,它就会计算调用自身来迭代剩余的字符串。这样它可以更深入地访问数组。
这些是我的问题:
- 我不知道我的想法是否正确。
- 如果我的想法是正确的,那么基本情况是什么。
- 我如何确保它计算内部的所有内容,无论它们是什么?(我的意思是我如何确保它以相同的方式对待数字、字符串等)
我认为函数体应该如下所示(我在这里使用java,但我认为语言在这里不是很重要):
公共(public)静态 int 计数器(字符串 a){ 整数总和=0; //一些迭代字符串的代码 //一些代码来检查条件并在需要时调用该方法 //一些将对象和数组的数量相加的代码 返回总和; }
如果代码应该像我所说的那么我该如何填充正文? 感谢您抽出时间。
最佳答案
根据您设计递归算法和输入大小的方式,您可能会遇到递归堆栈溢出的常见问题,即递归非常深并耗尽内存空间
如果您不必必须使用递归,那么这是一个不同的迭代Pythonic解决方案,但您应该能够将其转换为Java。
您想要增加以逗号分隔的每个项目的计数。但是,如果该元素具有“]”字符,您就知道它是嵌入列表的一部分。通过计算右大括号和元素的数量,您可以得到总数。
更新以处理带有嵌入逗号的字符串
# Function for removing the chars between apostrophes
def remove(s,c):
while(s.find(c) != -1):
i = s.find(c) # find the first instance of c but ' or " in our case
i2 = s.find(c,i+1) # find the second instance
s = s[0:i]+s[i2+1:] # Remove the string
return s
return s
s = "[['a,b,c'],[1,2,3]]"
s = s[:-1] # remove the last list char
total = 0
s = remove(s,'\'')
s = remove(s,'"')
l = s.split(',')
for el in l:
total+=1
total+= el.count(']')
print(total)
关于algorithm - 使用递归计算数组中对象的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53774457/