我正在努力实现这个目标:
7 2 3 5
10 12 20
res = 10 + max(7,2) ; 12 + max(2,3); 20 + max(3,5)
Run Code Online (Sandbox Code Playgroud)
到目前为止这是我的代码:
//prevline.count is always currLine.count+1
let getResLine currLine prevLine =
let rec loop resLine prevLine' = function
|[] -> resLine
|hd::tl -> loop (hd + (max (List.nth prevLine' 0) (List.nth prevLine' 1)))::resLine (List.tail prevLine') tl
loop [] prevLine currLine
Run Code Online (Sandbox Code Playgroud)
但它没有编译,它告诉我一些类型不匹配的错误,可能有更多经验的人可以看到我做的一些明显的错误,请帮助
编辑:根据建议更新我的代码,但它仍然无法正常工作
顺便说一下,您可能对另一种查看问题的方式感兴趣.从数字列表开始:
let nums1 = [7; 2; 3; 5]
let nums2 = [10; 12; 20]
Run Code Online (Sandbox Code Playgroud)
然后
let res = nums1
|> Seq.pairwise
|> Seq.map2 (fun a (b1, b2) -> a + max b1 b2) nums2
Run Code Online (Sandbox Code Playgroud)
这样做的好处是在语义上与您想要做的更匹配.
编辑:使用简化map2的,而不是zip和map感谢@Daniel和@JonHarrop.
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |