5.17
这个题目思路上并不难,但是实现起来,我用了很多的时间,主要还是自己的思路不是特别清晰吧。
用到了三个循环
for(第一个数字 to 最后一个数字){
for( 数字对应的第一个字母 to 最后一个字母){
for(Arraylist中的第一个元素 to 最后一个元素){
Arraylist.add();
}
}
这里要对Arraylist进行操作,删除无效的部分
}
public class Solution {
/**
* @param digits A digital string
* @return all posible letter combinations
*/
public ArrayList<String> letterCombinations(String digits) {
// Write your code here
String[] nums = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
ArrayList<String> res = new ArrayList<String>();
int count = 1;
int length = digits.length();
for(int i = 0; i < length ; i++){
// num 表示第i位的数字的值
int num = digits.charAt(i) - '0';
// sizeNum表示,这个数字对应的字符串的长度
int sizeNum = nums[num].length();
if(res.isEmpty()){
for(int j = 0; j < sizeNum ; j++){
//System.out.println("nums[i]:" + nums[num] +";i:" + i + ";j:" + j);
res.add(Character.toString(nums[num].charAt(j)));
}
count = sizeNum;
continue;
}
else{
int resSize = res.size();
for(int j = 0; j < sizeNum ; j++){
for(int k = 0; k < resSize;k++){
String s = res.get(k) + Character.toString(nums[num].charAt(j));
res.add(s);
}
}
}
if(!res.isEmpty()){
int resSize = res.size();
//System.out.println("resSize:" + res.size() + "; count:" + count);
//System.out.println("res前" + res);
for(int h = 0;h < count;h++){
res.remove(0);
}
//System.out.println("res后" + res);
}
count = count * sizeNum;
}
return res;
}
}