algorithm - 使用递归计算数组中对象的数量

标签 algorithm recursion

我在递归方面遇到了一些问题,为了理解它,我试图为自己提出问题并解决它们。这个特殊的问题让我很困惑: 将此视为字符串形式的输入:

[[a,b,c],[[d]],[[e,f]],[g],h,i,[[j,[k,l]]]]

目标是找到列表中事物的总数并列出它们本身。对于此示例,结果将是:12+10 = 22 请注意,输入不是数组,而是字符串。也可以代替 a,b,... 任何东西都可以使用,比如数字、字符串等

[12345,0.34,["afv",24]]

这是我的想法,但我会提到为什么我无法实现它:
我们编写一个开始迭代字符串的函数。它应该计算 [] 之间的总数。每当函数到达 [ 时,它就会计算调用自身来迭代剩余的字符串。这样它可以更深入地访问数组。
这些是我的问题:

  1. 我不知道我的想法是否正确。
  2. 如果我的想法是正确的,那么基本情况是什么。
  3. 我如何确保它计算内部的所有内容,无论它们是什么?(我的意思是我如何确保它以相同的方式对待数字、字符串等)
  4. 我认为函数体应该如下所示(我在这里使用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/

相关文章:

c - 在 C 中使用递归的数字总和

sql - 使用 SQL Server 递归公用表表达式获取文件夹中所有文件的完整路径(带子文件夹)

algorithm - 找到以 K 为因子的最小长度区间

algorithm - VF2算法-实现

performance - 数学算法

iphone - 如何减少 map 上的注释数量?

python - 将构造和打印列表的嵌套 for 循环转换为递归函数

algorithm - 我陷入了我的递归

algorithm - 递归和 DFS 等价吗?

ruby - ruby 中的递归 mustache 部分