LeetCode 17 电话号码的字母组合

题目

LeetCode 17 电话号码的字母组合_第1张图片

代码实现:


自述:开始我是打算用char二维数组来实现,后来提交时,有一组案例出错,发现’2’到’9’不是所有的元素都是3个,其中有2个数字有4个,如果要使用会造成空间浪费和额外的判断条件。所以改用String数组的存储结构。

难点:此题难在怎么在不知道循环的次数的情况下,将数字对应的字符组合起来,易知如果digits字符串长度确定,循环次数是确定的。

将list集合的元素与下一个数字对应的字符组合,即可将该数字并入。

class Solution {
	public List<String> letterCombinations(String digits) {
        List<String> list = new ArrayList<String>();
		if(digits==null || digits.length()==0) {
			return list;
		}
		String[] str = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
		list.add("");
		for(int i=0;i<digits.length();i++) {//digits长度为需要的str数组元素的个数,即str不同元素的拼接的次数
			String s = str[digits.charAt(i)-'2'];
			int size = list.size();
			for(int j=0;j<size;j++) {//size为上次拼接结束后的list大小,即本次拼接开始的list大小
				String cur = list.remove(0);
				for(int k=0;k<s.length();k++) {//这是将str元素拆分与上次拼接得到的list进行组合
					list.add(cur+s.charAt(k));
				}
			}
		}
		return list;
	}
}

结果:

1

你可能感兴趣的:(LeetCode,leetcode,字符串,java)