Java 当字符串长度为奇数时,使用递归打印字符串的基本情况
我的程序使用递归以三角形的形式打印字符串:Java 当字符串长度为奇数时,使用递归打印字符串的基本情况,java,recursion,Java,Recursion,我的程序使用递归以三角形的形式打印字符串: Sample input: "abcdefghij" Sample output: aj abij abchij abcdghij abcdefghij Sample input: "abcdefghi" Sample output: a abi abchi abcdghi abcdefghi 问题是,只有当字符串长度为偶数时,这种方法才有效。请问如何调整基本大小写以打印中间字符? 这是我的密码: public class Di
Sample input: "abcdefghij"
Sample output:
aj
abij
abchij
abcdghij
abcdefghij
Sample input: "abcdefghi"
Sample output:
a
abi
abchi
abcdghi
abcdefghi
问题是,只有当字符串长度为偶数时,这种方法才有效。请问如何调整基本大小写以打印中间字符?
这是我的密码:
public class DisplayTriangle
{
public static void main(String[]parms)
{
print ("abcdefghij");
}
public static void print(String str)
{
int mid = str.length()/2;
String first="";
String last="";
print(str,0,str.length()-1,first,last);
}
public static void print(String str, int start, int end,String first, String last)
{
if( start >= end || end <=start )
{
return;
}
first+=str.charAt(start);
last = str.charAt(end)+last;
System.out.println( first+ last );
print(str, (start+1), (end-1), first, last);
}
}
公共类DisplayTriangle
{
公共静态void main(字符串[]parms)
{
印刷品(“abcdefghij”);
}
公共静态无效打印(字符串str)
{
int mid=str.length()/2;
字符串优先=”;
字符串last=“”;
打印(str,0,str.length()-1,first,last);
}
公共静态无效打印(字符串str、int start、int end、字符串first、字符串last)
{
如果(开始>=结束| |结束,请检查下面修改的打印功能版本
public static void print(String str, int start, int end,String first, String last)
{
if( start > end || end <start )
{
return;
}
if(start==end){
first+=str.charAt(start);
last = str.charAt(end+1)+last;
System.out.println( first+ last );
return ;
}
first+=str.charAt(start);
last = str.charAt(end)+last;
System.out.println( first+ last );
print(str, (start+1), (end-1), first, last);
}
公共静态无效打印(字符串str、int start、int end、字符串first、字符串last)
{
如果(开始>结束| |结束尝试使用两种方法
1. for even , e.g,
if(string.length()%2==0)
{
//Method for Even
}
2. for odd , e.g,
else
{
//Method for odd
}
这可以做到,无需过度的字符串连接,并且缩进正确:
private static void print(String str) {
if (! str.isEmpty())
print(str, (str.length() - 1) / 2, 1, (str.length() - 1) | 1);
}
private static void print(String str, int indent, int leftLen, int rightIdx) {
for (int i = 0; i < indent; i++)
System.out.print(' ');
System.out.println(str.substring(0, leftLen) + str.substring(rightIdx));
if (leftLen < rightIdx)
print(str, indent - 1, leftLen + 1, rightIdx - 1);
}
a
阿比
阿卜奇
abcdghi
abcdefghi
解释
第二种print
方法应该非常明显:printindent
空格,printleftLen
字符来自str
,所有字符都从rightIdx
开始。如果不这样做,则以较少的缩进,从左侧多缩进一个,从右侧提前一个字符的方式递归
查看示例输出,长度10
和长度9
的indent
值应为4
,因此(str.length()-1)/2
将计算该值
第一次调用应该总是从左边打印1
字符,所以这很简单
现在,偶数长度10
的rightIdx
的初始值应为9
,因此将打印j
,奇数长度9
的初始值也应为9
,因此不会打印任何内容。因此,对于长度10
/9
我们减去1
,得到9
8,然后设置最低位(| 1
)要使其成为9
/9
您还可以向我们展示所需的输出吗?您打算在每次递归过程中删除多少个字符?您的代码当前似乎一次删除2个字符,但奇数长度字符串会发生什么情况?我刚刚添加了示例应该是@tim biegleisenfor input的样子“abcdefghi”,一个奇数长度的字符串,第一行打印“ai”,最后一行打印“abcdefghi”对不起,我忘了删除一行。你能评论一下last=str.charAt(end+1)+last;
在if(start==end)里面吗
block@i_use_the_internet如果这解决了您的问题,您能接受吗?请尝试解释您的技术,而不是复制粘贴。