首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码-递归编码

编码-递归编码
EN

Stack Overflow用户
提问于 2015-06-10 17:12:03
回答 7查看 1.5K关注 0票数 0

我正在尝试编写bat问题repeatFront:

给定字符串和int n,返回由字符串的前n个字符组成的字符串,然后返回字符串的第一个n-1字符,以此类推。您可以假设n介于0和字符串的长度之间(包括n=0和n <= str.length())。 repeatFront(“巧克力”,4)→"ChocChoChC“repeatFront(”巧克力“,3)→"ChoChC”repeatFront(“冰淇淋”,2)→"IcI“

下面是我正在尝试的代码:

代码语言:javascript
复制
public String repeatFront(String str, int n) {
    if(n==0) {
        return str;
    }
    sub = str.substring(0,n);
    sub = sub+repeatFront(sub,n-1);
    return sub;
}

我得到的错误是,在字符串的末尾有一个额外的字符。第一个例子是"ChocChoChCC“,第二个是"ChoChCC”,依此类推。我只想知道,在概念上,我做错了什么,以及如何修复它。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-06-10 17:17:39

啊我发现你的问题了。

只有在n == 0时才必须返回空字符串。

返回str将第二次返回额外的最后一个字母,因为调用repeatFront(Ch, 1)repeatFront(C, 0)都会返回C

通过将n==0的返回更改为return "";来修正:

代码语言:javascript
复制
if(n==0) {
    return "";
}
票数 3
EN

Stack Overflow用户

发布于 2015-06-10 17:28:43

好吧,这很管用-

代码语言:javascript
复制
 public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    repeatFront("Chocolate", 4,sb);
    System.out.println(sb);
}

public static void repeatFront(String str, int n,StringBuilder sb) {
    if(n==0) {
        return;
    }
    sb.append(str.substring(0,n));
    repeatFront(str,n-1,sb);
}
}

问题-对于n=0,你是返回子,因为你得到了最后一个额外的字符。我使用了StringBuilder,它使它变得干净,并且消除了为每个调用创建额外字符串对象的开销。

票数 0
EN

Stack Overflow用户

发布于 2017-01-01 18:02:15

你可以用这个:

代码语言:javascript
复制
public String repeatEnd(String str, int n) {
  if (n == 0)
  return "";

  String res = re(str, n);
  String resl ="";

  for (int i =0 ; i < n ; i ++){
    resl = resl + res;
  }
  return resl;
}
public String re(String s , int n){
  String end = "";

  int len = s.length();

  end = s.substring(len-n , len);

  return end;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30762992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档