1
4
您应该交换最外层的字节,即i=1和j=(l-1),然后i=2,j=(l-2)等,直到i<=(j-1)(换句话说,直到i=j,表示偶数个字符,或者i=j-1,表示奇数)。 在O(N)中执行。 递归不是必需的,而且“将它分成两个函数”似乎也不是必需的。 好的,阅读你的编辑关于这是任务的一部分。 在这种情况下,你 做 如吉米所说,需要两个函数来保存“main”函数的参数列表。 第二个函数是:
请原谅我生锈的C,我现在住在C,vb.net和javascript中,一些细节让我无法理解。 此外,我可能会或可能不会在那里留下一个bug,因为这 是 作业。;) |
2
2
谢谢理查德,那很有帮助! 这就是你想的吗? |
3
0
您当然可以更好地交换一端的元素和另一端的元素,并前进到下一个元素。然后需要两个参数:指向当前元素的指针和到另一端的距离。基本情况是距离<=2的情况。这将使您的算法在线性时间内工作(o(n))。 |
4
0
假设您的代码对n长度的字符串执行f(n)操作。然后,从你写的递归中我们可以看到:
第一个“n”是strlen,f(n-1)是递归调用,而(n-1)*5来自for循环(3个操作,以及“i<l”、“i++”。 如果我们打开公式,我们得到:
最后一个公式显然是O(n^2)。 您不需要递归来反转文本。用(l-i)字符简单地切换每个i-char。
|
5
0
实际上,将问题分解为函数(和内联函数)可能是一个好主意。 算法非常简单,给定一个n个字符的字符串,您将第一个字符与最后一个字符交换,第二个字符与最后一个字符交换,以此类推,直到您交换了每个字符。 这可以用伪代码这样表示:
这是一个可能的带有指针的C实现:
无论如何,如果字符串是只读缓冲区(例如,如果您尝试这样做),这将不起作用。
它会给你一个分割错误。 因此,最好的解决方案实际上是动态分配一个缓冲区,在这个缓冲区中复制反向字符串,然后在不再需要缓冲区时返回并释放缓冲区。 |
6
0
跳出框框思考。
|
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |