当字符串长度为奇数时使用递归打印字符串的java基本情况
我的程序使用递归以三角形的形式打印字符串:
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);
}
}
# 1 楼答案
这可以做到,无需过度的字符串连接,并且缩进正确:
输出
解释
第二种
print
方法应该非常明显:打印indent
空格,从str
打印leftLen
字符,所有字符都从rightIdx
开始。如果未完成,则以较少的缩进、左侧的缩进和右侧的缩进提前一个字符进行递归查看示例输出,对于length
10
和length9
,indent
的值应该是4
,因此(str.length() - 1) / 2
将计算该值第一个调用应该总是从左边打印
1
字符,所以这很简单现在,偶数长度的
rightIdx
的初始值应为9
,因此将打印j
,奇数长度的9
也应为9
,因此不会打印任何内容。因此,对于长度10
/9
,我们减去1
得到9
/8
,然后设置最低位(| 1
),使其成为9
/9
# 2 楼答案
请检查以下打印功能的修改版本
# 3 楼答案
尝试使用两种方法