挑战在于创建一种算法,用于根据序列中的当前位置生成序列中特定大小的数字子集。
在浏览 Stack Overflow 或 Digg 等繁忙网站上的许多内容页面时,通常希望为用户提供一种快速跳转到第一页、最后一页或靠近当前页面的特定页面的方法。观看。
要求
- 始终显示第一页和最后一页页码
- 页码子集将包含当前页码以及它之前和/或之后的页码(取决于当前页)
- 页码子集将始终是固定页数,并且永远不会超过或低于该固定页数,除非:
totalPages < fixedWidth
- 当前页码在子集中的位置是固定的,除非:
1 <= currentPage < (fixedWidth - defaultPostion)
或者(totalPages - currentPage) < (fixedWidth - defaultPostion)
- 输出应指示数据的第一页与子集的第一页之间以及子集的最后一页与数据的最后一页之间的差异何时大于 0 。该指标在任一位置最多应出现一次。
如果您还无法想象这一点,请查看问题/答案下的 Stack Overflow 个人资料。如果其中任何一个都超过 10 个,您应该会在底部看到以这种方式生成的分页链接。那,或者滚动到http://digg.com的底部并观察他们的分页控制。
例子
所有示例都假定子集大小为 5,当前页面位于位置 3,但这些应该可以在您的解决方案中进行配置。...
表示页码之间的间隔,[x]
表示当前页。
当前页面:第 1 个,共 30 个
输出: [x][2][3][4][5]...[30]
当前页面:第 2 个,共 30 个
输出: [1][x][3][4][5]...[30]
当前页面:第 13 页,共 30 页
输出: [1]...[11][12][x][14][15]...[30]
当前页面:第 27 页,共 30 页
输出: [1]...[25][26][x][28][29][30]
当前页面:第 30 页,共 30 页
输出: [1]...[26][27][28][29][x]
当前页面:第 3 页,共 6 页
输出: [1][2][x][4][5][6]
当前页面:第 4 个,共 7 个
输出: [1][2][3][x][5][6][7]
附加说明
- 第一页和最后一页不计入,
numberOfPages
除非它们是顺序的一部分,numberOfPages
如[1][x][3][4][5]...[30]
或[1]...[26][27][28][x][30]
,但不是[1]...[8][9][x][11][12]...[30]
- 如果子集的任一端与第一页或最后一页之间的距离小于 1,则不应包含间隙指示符。因此,可以有一个不中断的页面序列,
fixedWidth + 2
直到[1][2][3][x][5][6]...[15]
或[1][2][3][x][5][6][7]
欢迎使用任何和所有语言的解决方案。
祝你好运!