Module: CodeCook::StackAndQueue

Defined in:
手写代码必备手册(Ruby版).rb

Overview

第四章 栈和队列

Class Method Summary (collapse)

Class Method Details

+ (String) convert_base(n, d)

进制转换,将十进制转换为其他进制

Parameters:

  • n (Integer)

    `十进制`的被转换数据

  • d (Integer)

    要被转换成的`目标进制`

Returns:

  • (String)

    转换后的其他进制结果 每一位统一用十进制表示,不做字母或者其他符号的转换, 每位之间逗号分割



23
24
25
26
27
28
29
30
31
32
33
34
# File '手写代码必备手册(Ruby版).rb', line 23

def convert_base(n, d)
    queue = []

    while n != 0
        e = n % d
        # 从顶部位置将元素入队
        queue.unshift e
        n /= d
    end

    queue.join','
end

+ (Integer) restore(s = '', d)

进制转换,将其他进制转换为十进制

Parameters:

  • s (String) (defaults to: '')

    `其他进制`的被转换数据, 每一位统一用十进制表示,不做字母或者其他符号的转换, 每位之间逗号分割

  • d (Integer)

    被转换数据的`进制数`

Returns:

  • (Integer)

    转换后的十进制结果



43
44
45
46
47
48
49
# File '手写代码必备手册(Ruby版).rb', line 43

def restore(s='', d)
    data = []
    s.split(',').reverse.each_with_index { |e, idx|
        data << e.to_i*(d**idx)
    }
    data.inject(0){|sum, e| sum += e}
end

+ (Object) yanghui_triangle(i = 10)

打印出杨辉三角形到终端

分行打印二项式 (a+b)^x 展开式的系数。

打印出来的结果类似这样:

         1
        1 1
       1 2 1
      1 3 3 1
     1 4 6 4 1
    1 5 10 10 5 1
   1 6 15 20 15 6 1
  1 7 21 35 35 21 7 1
 1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

Parameters:

  • i (Integer) (defaults to: 10)

    二项式的幂

Returns:

  • nil



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File '手写代码必备手册(Ruby版).rb', line 68

def yanghui_triangle(i=10)
    # 计算C(m,n)的组合数
    x=->(m,n){(1..m).to_a.combination(n).size}
    # 计算第n行的所有二项式系数
    y=->(n){r = []; (n+1).times{|i|r << x.call(n,i)}; r}
    # 收集N条二项式的系数二维数组
    z=->(n){r = []; n.times{|i|r << y.call(i)}; r}
    # 以杨辉三角形的形式输出结果
    v=->(n){
        aa = z.call(n)
        s = aa.size
        aa.each { |a| puts "#{' '*(s-a.size)}#{a.join(' ')}" }
    }
    v.call(i)
end