您的位置:首页 > 其它

Leetcode 17 Letter Combinations of a Phone Number

2015-06-14 19:51 537 查看
Given a digit string, return all possible letter combinations that the number could represent.

A mapping of digit to letters (just like on the telephone buttons) is given below.



Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

循环:输入数字数{每个之前组成的字符串+{每个该次输入数字对应的字母}}

def letter_combinations(digits)
letter = ['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
return [] if digits == ''
ans = [['']]
digits.chars.each do |x|
ans << []
ans[-2].each do |y|
letter[x.to_i].chars.each {|c| ans[-1] << y+c}
end
end
ans[-1]
end


这里使用了两个变量交替更新,更省空间。

def letter_combinations(digits)
letter = ['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
return [] if digits == ''
a = ['']
digits.chars.each do |x|
b = []
a.each {|y| letter[x.to_i].chars.each {|c| b << y+c } }
a = b
end
a
end


递归:记载当前已生成的字符串

def letter_combinations(digits)
@letter = ['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
return [] if digits == ''
@ans = []
comb('',digits,0)
@ans
end

def comb(str,digits,i)
@ans << str if str.length == digits.length
@letter[digits[i].to_i].chars.each {|x| comb(str+x,digits,i+1)}
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: