iT邦幫忙

1

Ruby解題分享--Length of Last Word && Plus One && Add Binary

  • 分享至 

  • xImage
  •  

週日一堆韓國綜藝要看....好忙!

Yes

上一篇Maximum Subarray解題,最後答案有稍作修改。


Length of Last Word

題目連結:https://leetcode.com/problems/length-of-last-word/
重點提醒:最後一組元素一定有資料,不會是空格。
好的,又是一題證明Ruby對資料處理黑魔法的強大...

整理如下

def length_of_last_word(s)
end

p length_of_last_word("Hello World")  #=>5
p length_of_last_word("  fly me   to   the moon  ")  #=>4
p length_of_last_word("luffy is still joyboy")  #=>6

當然我才疏學淺,可能其他語言也許有類似語法。
如果禁止使用Ruby特殊語法的話,可能我會將這組資料由後往前開始檢查,遇到空格不要,遇到字丟進空陣列裡。
或是建立一個計數器是0,遇空格不往上加,檢查到字計數器往上加(丟到陣列裡),再度遇到空格後停止檢查,回傳計數器數字或是新陣列長度。

Ruby部分請先請先了解我們字串有split語法可使用。

2.7.3 :001 > "  fly me   to   the moon  ".split
 => ["fly", "me", "to", "the", "moon"] 
2.7.3 :002 > ["fly", "me", "to", "the", "moon"].last
 => "moon" 
2.7.3 :003 > "moon".size
 => 4 
2.7.3 :004 > "moon".length
 => 4 
def length_of_last_word(s)
  arr = s.split
  arr_last = arr.last
  arr_last.size
end

def length_of_last_word(s)
  s.split.last.size 
end

Plus One

題目連結:https://leetcode.com/problems/plus-one/
題目重點:無,要了解method回傳的到底是啥,並且對物件本身到底會不會改變。
但題目中有一個要素是,陣列中每一個值是0 <= 值 <= 9。
整理

def plus_one(digits)
 
end

p plus_one([1,2,3]) #=> [1,2,4]
p plus_one([4,3,2,1]) #=> [4,3,2,2]
p plus_one([0]) #=> [1]

第一種解法,利用split與join語法。

2.7.3 :001 > [4,3,2,1].join
 => "4321" 
2.7.3 :002 > "4321".to_i + 1
 => 4322 
2.7.3 :003 > 4322.to_s
 => "4322" 
2.7.3 :004 > "4322".split()
 => ["4322"] 
2.7.3 :005 > "4322".split("")
 => ["4", "3", "2", "2"] 
def plus_one(digits)
  arr = []
  new_arr = (digits.join.to_i + 1).to_s.split("")
  new_arr.each {|num| arr << num.to_i}
  arr
end

#改用map
def plus_one(digits)
  new_arr = (digits.join.to_i + 1).to_s.split("")
  new_arr.map {|num| num.to_i}
end

如果沒有 0 <= 值 <= 9這個條件。
那我們試著利用針對陣列最後一個數字處理就好。

def plus_one(digits)
  return digits if digits[digits.size - 1] = digits[digits.size - 1] + 1
end

我不會承認我一開就這麼解,然後一直想不出哪裡錯....


Add Binary

題目連結:https://leetcode.com/problems/add-binary/

蠻好玩的一題...
好玩的點在於用不用Ruby黑魔法這件事。了解二進制、邏輯、運算公式,我覺得都有助於學習了解程式語言。
特殊語法是把一些運算包起來的,當然如果會比包起來的算法還要快的解法當然好。
不過,這就不是在快速了解Ruby了,是高手在做的事。
我是菜鳥。

直接解答了

def add_binary(a, b)
  (a.to_i(2) + b.to_i(2)).to_s(2)
end

p add_binary("11", "1") #=>"100"
p add_binary("1010", "1011") #=>"10101"

美好的週日結束了T_T...


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言