返回信息流package cn.java.basic;
import java.util.ArrayList;
import java.util.List;
public class Solution {
final static String[] dic = new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
static List<String> result = new ArrayList<String>();
public static List<String> letterCombinations(String digits) {
int len;
if((len=digits.length())==0) return result;
helper(digits,0,len,new StringBuilder());
return result;
}
public static void helper(String digits,int index,int len,StringBuilder cur){
if(index>len) return;
if(index==len){
result.add(cur.toString());
}else{
int j = digits.charAt(index)-'0';
for(int k=0;k<dic[j].length();k++){
cur.append(dic[j].charAt(k));
helper(digits,index+1,len,cur);
//cur = cur.deleteCharAt(cur.length()-1); // 这样写就是对的
cur = new StringBuilder(cur.substring(0, cur.length()-1)); //这样写就是错的
}
}
}
public static void main(String[] args) {
letterCombinations("23");
System.out.println(result);
}
}
cur = cur.deleteCharAt(cur.length()-1);输出正确结果:[ad, ae, af, bd, be, bf, cd, ce, cf]
cur = new StringBuilder(cur.substring(0, cur.length()-1)); 输出[ad, ae, af, abd, abe, abf, abcd, abce, abcf]
不是很明白哪边有问题。。求大神们拍醒。。。。leetcode 17题
这是一条镜像帖。来源:北邮人论坛 / java / #41693同步于 2015/6/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
刷题时遇到的一个关于StringBuilder的问题
Monologue
2015/6/16镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
第24行你是先将cur传入了helper()中,然后再更改cur
cur = cur.deleteCharAt(cur.length()-1); Java是用System.arraycopy实现的,我觉得是不是这里改变了原对象
而cur = new StringBuilder()这是是把cur指向了新生成的对象,上一步传入helper的对象不变?
嗯。似乎想明白了。[ema11]
【 在 dss886 的大作中提到: 】
: 第24行你是先将cur传入了helper()中,然后再更改cur
: cur = cur.deleteCharAt(cur.length()-1); Java是用System.arraycopy实现的,我觉得是不是这里改变了原对象
: 而cur = new StringBuilder()这是是把cur指向了新生成的对象,上一步传入helper的对象不变?