坐姿正确,才能避免腰部受伤,想投身久坐的职业,请爱护身体。
内建型态或者称内建类别,也就是程序语言中已经标准化的资料型态,例如数字、字串、阵列、杂凑及符号等,很多语言的内建型态都很类似,也都有可能相同的内建方法,来对这些资料型态,或是资料封装後变成的实体来进行查询或操作等。
变数在这里我会先用数学内的解释方式,是一个用来表示"值"的"记号","Ruby中用变数来将前面提到的那些资料,来实体化"。在Ruby中,变数是非大写开头的英文字母组合,可加数字但第一个字要英文,不可加符号。
值 : 就是指那些资料。
记号 : 因符号类别,我自己故意称记号。
很多人都说,Ruby是有很多方便语法的语言,是不是最多我不知道,但的确不少,可是要熟悉使用一些语法(黑魔法),必须先了解你的资料型态属於哪一种类别,因为不同的类别是有不同的方法的,当然也有方法不同的类别也会有。
因此学习怎麽查询操作这些类别前,请先学会一个method,就是class。如下图。
电脑非常的清楚回答,输入的资料为哪一种类别(有发现都是大写英文吗?),知道正确的类别有哪些方法,才能快速的上手,不然跟我一样常常看到类似
NoMethodError (undefined method ??? for "???":String)
的台词,是会信心大打折的。
接着知道我们要操作的资料是哪种类别後,便可以到https://ruby-doc.org ,查询我们所需要的语法。
这边先以我想分享解题的Reverse-integer中会用到的一些常用方法来举例。
语法中如果出现长得像
to_?
,大概就知道是需要转换型态,常用到的有to_i, to_s, to_a及to_h等。
非常的口语化,to Integer或to String,就是变成上面说到的那些类别,下图简单示范
可以发现数字可以转换成字串,但不可以直接to_a转成阵列。
阵列可以转换成字串,但不可以成数字,而要了解Ruby中转型的规定除了多练习外,就是查看https://ruby-doc.org 各个列别中有哪些方法可以用,来快速上手。
加映:加减号
再举例一个方法reverse,字串可用,数字不可直接用。
这种在程序语言中,某类别能用,某类别不行的语法是非常多的,只有多练习了。
leetcode上的Easy题型第二题,为什麽我不从第一题解勒?
因为:第一题我就不会了呀,转职工程师梦想从刷leetcode开始,在第一题结束!
单纯因为第二题刚好符合今天介绍的内容。
# 题目:Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-2**31, 2**31 - 1], then return 0.
# Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
# Example 1:
# Input: x = 123
# Output: 321
# Example 2:
# Input: x = -123
# Output: -321
# Example 3:
# Input: x = 120
# Output: 21
# Example 4:
# Input: x = 0
# Output: 0
# Constraints:
# -2 ** 31 <= x <= 2 ** 31 - 1
题目很简单,看不懂那串长长的英文,看例子也可以看出,题目希望我们将数字反转,但是正负数,或尾数是零,0,以及结果必须是32bit(就是-2 ** 31 <= x <= 2 ** 31 - 1这范围之内),初学者,不可能一看到题目马上会解,但是这些例子其实常常是答案,告诉你要将题目变成什麽答案,所以可以考虑跟菜鸟我一样从例子下手,满足例子,答案常常就已经跑出来了。
求出 x.to_s.reverse.to_i 是我们所需一段程序码。
求出 -(x.to_s.reverse.to_i) ,负号的使用,以及()可以省略。
这边也是一个特点,数字字串如果前面有0,转换後会自动去除,所以 x.to_s.reverse.to_i 即可满足
至於零转换还是零,所以也可用同一条程序码解决,或是去考虑0是否就不必检查,那又是另外一个问题
最後,将「-2 ** 31 <= x <= 2 ** 31 - 1」转换成程序码,
x < -2 ** 31 - 1 || x > 2 ** 31 + 1
将这些程序码加入判断(if)後即可求出解答,由於我还没介绍到那边,所以直接先贴自己的解法,如果真的是新手有缘人看不懂,我会之後说明,另外我的解法绝对不是最好解法,每个人每个时期,解题都可能会有不同的解法的,我相信高手们也都是会这样认为,只是菜鸟我解法可能很丑是绝对的。
def reverse(x)
if x >= 0
res = x.to_s.reverse.to_i
else
res = -x.to_s.reverse.to_i
end
if res < -2 ** 31 - 1 || res > 2 ** 31 + 1
0
else
res
end
end
三元运算式简化先跳过,後提。
其实我也是个英文苦手者,到现在常常打true还常常打成ture,但请一起克服这点,英文也就是多看多读多用就会的东西(说得很心虚)。
有人会问为何要解题,我会先回答,因为可以快速练习到程序语言中特殊有的语法、惯例及特性。
在初学阶段解题时,常常搞不懂,解题有用处吗?
会有这个疑问其实就是看不懂题目及没有真正实做过专案,程序语言是拿来与电脑沟通後下达指令及查询所需资料的,解题就是为了能查到存放在记忆体中的资料所做的练习(只是其一)。
<<: 在 elementory OS 5.1 上轻松安装呒虾米
前言: 经过这两天的测试,总算知道问题出在哪里,之前训练模型的准确度低,是因为他根本没训练到,查了很...
在程序里第二个常出现的就是字串处理啦 运算子 连接运算子 说明 用法 . 连接 x . y .= ...
在开发专案时可能会有多人同时commit和push的状况,很容易有conflict,这时候就需要使用...
Digital India is a campaign launched by the Govern...
本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...