4clojure第43个问题逆向交错(Reverse Interleave)
来源:互联网 发布:手机淘宝试用中心在哪 编辑:程序博客网 时间:2024/06/06 01:10
Reverse Interleave
Difficulty:MediumTopics:seqs
Write a function which reverses the interleave process into x number of subsequences.
解决方案:如果简单的满足以上条件,即序列的大小刚好是间隔位置的倍数,则答案可以很简单
(fn [v n] (apply map list (partition n v)))但是如果序列的大小和间隔位置数不是倍数关系,则需要填充nil到原来的序列中,使得满足倍数的关系,然后再map应用函数的过程中剔除nil。
(ns for-clojure.problem43)(defn partition-seq-with-n-element [v n] (apply map (fn [& x] (remove nil? x)) (let [cnt (count v) size (int (Math/ceil (/ cnt n)))] (partition n (concat v (repeat (- (* n size) cnt) nil))))))(partition-seq-with-n-element [1 2 3 4 5 6 7] 2)
这里一个为什么使用了remove 而不是drop-while因为drop-while只是drop那先返回nil的元素,而(nil? nil)为true,所以不会被删除。
remove删除的是返回true的元素,而返回nil的元素是不会被删除的,所以这里正好要使用remove。
partition-all与partition的区别 partition把序列分成等大的片段,多余的会被舍弃,而partition-all会把多余的元素保留。
- 4clojure第43个问题逆向交错(Reverse Interleave)
- 4clojure第50个问题根据类型拆分序列
- 4clojure第58个问题:组合函数
- 4clojure第59个问题:创建自己的juxt
- 4clojure第97个问题:杨辉三角
- 4clojure第135个问题:中缀计算器
- 4clojure第54个问题:拆分序列
- 4clojure第118个问题:自己的map函数
- 4clojure第65个问题:黑盒测试序列类型
- 4clojure第55个问题:实现自己的序列频率统计函数
- 4clojure第56个问题从序列中找出不同的项并保持次序
- Reverse Iterators(逆向迭代器)
- 171101 逆向-EISCTF(Reverse)
- C++标准库---Reverse(逆向)迭代器
- Clojure第一天作业
- 4clojure
- 逆向迭代器 reverse iterator
- clojure解构(clojure destructuring)
- Java 夹杂文本字段的文件上传 后台实现(包括前端jquery实现的备忘)
- 关于list集合的remove和Iterator的remove
- 网页配色网站
- Python的常用库
- linux内存管理学习笔记
- 4clojure第43个问题逆向交错(Reverse Interleave)
- android学习笔记
- JAVA StringBuffer
- vc中__super的用法
- DOS命令大全--详解
- 大根堆和小根堆的C语言实现
- 数据库设计与应用开发
- 代码控制文件的打开
- 云风开发笔记(2) Redis数据库结构设计