https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/
此代码用于生成所有可能的字符串,当2到9(含)之间的每个数字都映射到英文字母字符串时.
问题是重新创建移动电话T9字典,这意味着,如果用户键入23,则应返回"abc"和"def"字符串的所有可能组合.
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(letterCombinations("23"));
}
private static final String[] KEYS = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
public static List<String> letterCombinations(String digits) {
List<String> ret = new LinkedList<String>(); //this is the local variable.
combination("", digits, 0, ret); //being sent to a method. But that method doesn't have any return type.
return ret; //so, how is this ret being populated????
}
private static void combination(String prefix, String digits, int offset, List<String> ret) {
if (offset >= digits.length()) {
ret.add(prefix);
return;
}
String letters = KEYS[(digits.charAt(offset) - '0')];
for (int i = 0; i < letters.length(); i++) {
combination(prefix + letters.charAt(i), digits, offset + 1, ret);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当方法没有返回类型时,如何设置ret声明和实例化的letterCombination()方法内部combination( ).
Java是按值100%传递的,但是,可能看起来像值的对象实际上总是引用对象.这些引用按值传递. /sf/answers/2836641/
在类似的语言中C或者C++引用具有特殊语法,但是在Java中,变量只是引用或原语,因此没有理由使用特殊语法.
该new LinkedList<String>()不是在栈中的局部变量.它是堆上的一个对象.传递对它的引用时不会复制它,也不会以某种方式将其设置为只读.如果您在另一个方法或另一个线程中修改它,它会被更改.
您的ret局部变量只是对该堆对象的引用.您无法在其他方法中更改该引用,但可以更改引用的对象.这是因为复制了引用,但只复制了引用.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |