在java中使用递归向后打印字符串的最有效方法是什么?如果给你这个标题:
public void printBackwards(String s)
答案 0 :(得分:2)
效率方面最有效的方法是不使用递归。
迭代方法(在字符串上向后循环并打印字符)是线性的,O(N),其中N是字符串的长度。
因为你问的是递归解,所以它是二次的,O(N ^ 2)表示时间复杂度,因为打印了N个字符,并且每个函数调用都有N个子串。 (每次将N-1个字符复制到存储器中)。
public void printBackwards(String s) {
if (!s.isEmpty()) {
int endPos = s.length() - 1;
System.out.print(s.charAt(endPos));
printBackwards(s.substring(0, endPos));
}
}
答案 1 :(得分:0)
既然你想要递归,我会给你一个提示(因为这个 是你班上的一个问题):
首先打印最后一个字符。你会如何递归地打印它?现在就回去吧!
悬停以显示代码:)
public void printBackwards(String s){
if(s.length()== 0)返回;
System.out.print(s.charAt(s.length() - 1);
printBackwards(s.substring(0,s.length() - 1);
}
答案 2 :(得分:0)
使用递归的最有效的方式是这样的:
static void printBackwards(String s)
{
printBackwards(s, 0, s.length());
System.out.println();
}
static void printBackwards(String s, int start, int end)
{
if ((end-start)<2)
{
if (end>start)
{
System.out.print(s.charAt(start));
}
return;
}
int mid = start + (end-start)/2;
printBackwards(s, mid, end);
printBackwards(s, start, mid);
}
这比其他答案更有效,因为它不会分配一大堆新字符串而只使用O(log N)堆栈......
但是,实际上你不需要递归来向后打印字符串。
注意:如果这是家庭作业并且你把它交给你,你的教授可能会知道你没有写它:)