Module: CodeCook::StackAndQueue
- Defined in:
- 手写代码必备手册(Ruby版).rb
Overview
第四章 栈和队列
Class Method Summary (collapse)
-
+ (String) convert_base(n, d)
进制转换,将十进制转换为其他进制.
-
+ (Integer) restore(s = '', d)
进制转换,将其他进制转换为十进制.
-
+ (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.
Class Method Details
+ (String) convert_base(n, d)
进制转换,将十进制转换为其他进制
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)
进制转换,将其他进制转换为十进制
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
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 |