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

周日一堆韩国综艺要看....好忙!

上一篇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...


<<:  第36天~

>>:  popcat 如何使用 python 搭配 selenium 在浏览器上自动点击

[Day 1] 参赛宣言

前言 首先,先来简单自我介绍下,学习期间我是有份与软件工程师完全无关的全职工作,但利用工作以外的其他...

Day28 Redis架构实战-Redis丛集指令

Redis丛集指令CLUSTER CLUSTER ADDSLOTS 设定Redis Server丛集...

存放资料的 state、module

在 JavaScript 中,储存资料的方式,长这样。 { name: 'Chris', age: ...

29. 建立路由

课程练习 新建完整的路由,并提供导览进入大部分页面(进入页面仅需要文字,不必加入实际的页面) 使用 ...

[DAY 16]用bot打出色色柴犬counter牌

最近很夯的色色柴犬大家应该有听过吧 没错就是这一系列牌组 然後某一天晚上不知道我发什麽神经突然有个念...