これは宿題ではなく、ウェブ上で見つけた面接の質問で、面白そうです。
だから私は最初にこれを見てみました:電話の文章題-しかし、それは不十分な言葉遣い/いくつかの論争を引き起こしたようです。私の質問は、その背後にある時間の複雑さに関するものであることを除いて、ほとんど同じです。
入力として10桁の電話番号を指定した場合に、考えられるすべての単語をリストします。これが私がしたことです:`
def main(telephone_string)
hsh = {1 => "1", 2 => ["a","b","c"], 3 => ["d","e","f"], 4 => ["g","h","i"],
5 => ["j","k","l"], 6 => ["m","n","o"], 7 => ["p","q","r","s"],
8 => ["t","u","v"], 9 => ["w","x","y","z"], 0 => "0" }
telephone_array = telephone_string.split("-")
three_number_string = telephone_array[1]
four_number_string = telephone_array[2]
string = ""
result_array = []
hsh[three_number_string[0].to_i].each do |letter|
hsh[three_number_string[1].to_i].each do |second_letter|
string = letter + second_letter
hsh[three_number_string[2].to_i].each do |third_letter|
new_string = string + third_letter
result_array << new_string
end
end
end
second_string = ""
second_result = []
hsh[four_number_string[0].to_i].each do |letter|
hsh[four_number_string[1].to_i].each do |second_letter|
second_string = letter + second_letter
hsh[four_number_string[2].to_i].each do |third_letter|
new_string = second_string + third_letter
hsh[four_number_string[3].to_i].each do |fourth_letter|
last_string = new_string + fourth_letter
second_result << last_string
end
end
end
end
puts result_array.inspect
puts second_result.inspect
end
まず、これは私が数分で一緒にハッキングしたものであり、リファクタリングは行われていません。コードが乱雑になったことをお詫びします。6週間前にRubyを学び始めたばかりですので、ご容赦ください。
最後に、私の質問です。この方法の時間計算量はどうなるのだろうかと思っていました。2番目のループ(4文字の単語の場合)は4回ネストされているため、O(n ^ 4)になると思います。しかし、私は本当に前向きではありません。それで、それが正しいかどうか、そしてこの問題を解決するためのより良い方法があるかどうかを知りたいと思います。