不太了解这个leetcode问题

时间:2020-06-21 02:45:10

标签: arrays ruby loops while-loop

这不一定是Ruby独有的,但是我最近在Ruby中遇到了一个缠绵的问题。

# @param {Integer[]} nums
# @return {Integer[]}
def running_sum(nums)
    i = 0
    while i < nums.length - 1
        nums[i+1] = nums[i] + nums[i+1]
        i += 1
    end
    nums
end

此目标是收集“运行总和”。我理解逻辑,但是这种语法使我感到困惑。这是我的理解:

“”此方法称为running_sum,并具有一个名为nums的数组(该数组可能包含数字)。我们将从零开始对这些数字进行计数。尽管我们所计数的数小于数组中数字的总数减去一,我们将遍历起点和随后的一个数组位置,还将在循环遍历时将以下数字添加到携带的总数中,最终的总数等于在遍历数组后结束的位置。最后的总数。我们在这里完成了”

我相信我掌握了总体逻辑,但是为了重复起见,我想知道为什么在这里使用我的字母。据我了解,它类似于我们在代数中使用的变量。我的理解正确吗?还是我就这样?

3 个答案:

答案 0 :(得分:1)

我想知道为什么我在这里使用这封信。

i通常是命令式编程中标准的'counter'变量名称,是'index'的缩写(例如,索引i处的数组为nums[i]

答案 1 :(得分:1)

# @param {Integer[]} nums
# @return {Integer[]}
def running_sum(nums) 
    i = 0
    while i < nums.length - 1
        nums[i+1] = nums[i] + nums[i+1]
        i += 1
    end
    nums
end

名为running_sums的方法是一个实例方法,它接受名为nums的参数。名为nums的变量的内容绝对可以是任何东西,因此您需要注意例如如果使用以下参数some_object.running_sums调用%w{word1, word2, word3}

会发生什么
some_object = SomeClass.new
some_object.running_sums(%w{word1, word2, word3})

顺便说一句,如果running_sums是类方法而不是实例方法,那就更好了

def self.running_sum(nums) 
  #etc ...
end

使您能够做

SomeClass.running_sums

您需要记住Ruby不是强类型的。

大多数其他语言都是强类型的,Java,C,C ++,C#,PASCAL,COBOL,Delphi,VisualBasic仅列出少数几个,您需要在使用变量之前先定义一个变量名并将变量类型设置为某种类型例如整数,字符串或十进制,则该变量将保留一个只能接受您设置的类型的值的内存插槽。 在强类型语言中,您可以提供一个变量名并随意命名,但将其定义为整数,并且只接受整数。例如var MyWord: integer表示您只能分配整数。在某些语言中,只有正整数,负整数会具有不同的类型。如果您尝试分配错误类型的值,将会有一个不会生成exe或最终结果的编译器,并且会引发错误,这在Ruby中并非如此。

在Ruby中,您可以随时组成一个单词并在其中填充所需的任何类型的值,并且仅仅因为您为变量指定了诸如my_number之类的名称,它就不会阻止某人在其中填充单词或字母如my_number =“一只猫坐在墙上”是完全有效的,显然不是数字。

是的,它有点像代数,字母i通常表示整数类型,但是在Ruby cos中要小心,它可以是任何东西,它只是一个包含0和1的内存块。

以上并非严格如此,但它应该给您正确的想法。

答案 2 :(得分:1)

我想知道为什么我在这里使用这封信。

这是一个懒惰的老习惯。

在这里,代表您正在处理一个整数,并且为了进行简短的代码练习就可以了。

但是,您可以用自己的代码做得更好。

计算机科学中只有两件事:缓存失效和命名。

-菲尔·卡尔顿

在抽象的编码练习中,没有实际应用的上下文很难正确地命名事物。因此,作者使用“整数”作为名称并将其缩写。但是,当您在现实世界中应用此方法时,您将拥有一个用例,该用例可以而且应该激发您对变量“类型”以外的事物的命名。

这不是特定于红宝石的,但红宝石社区(我发现)比其他社区更喜欢非常长且具有描述性的方法和变量名。因此,在生产代码中应用学习内容时,请使用变量的长描述性名称。