我目前正在对Euler项目进行练习,任务要求我找到一系列数字的百万位排列,现在我有两个选项可以定义我自己的算法来找到百万个排列或使用{{1}但是,我不确定Collections.suffle()
方法是否有可能计算出100万个不同的排列。
百万分之一的数字是通过对所有排列进行排序来决定的,但你可以忽略这一部分。
我的问题:
是否可以使用Collections.suffle()
生成一系列数字的100万个不同的排列?如果不是,您认为最佳方法或最佳方法可以产生一系列数字的100万个不同的排列?
这是Project Euler提供的内容:
数字的百万分之一的词典排列是什么:
Collections.shuffle()
请注意 - 我实际上并不希望有人为我解决这个问题。只是回答上面的问题就行了。谢谢。
答案 0 :(得分:4)
collections.shuffle()只是以随机排列顺序对数组进行随机播放。由于您需要遵循词典顺序,因此无法使用collections.shuffle()。而且当使用collections.shuffle()排列次数时,不能保证你将拥有所有的排列,因为collections.shuffle()可以多次生成相同的排列。 对于你如何做,这里有一些很好的链接,解释如何使用阶乘数系统来做到这一点。 Find the N-th permutation of an ordered string (Using factorial number system).
答案 1 :(得分:0)
我认为这就是你要找的......
func keyboardWasShown(_ notification: Notification){
let oldOffset = self.tableViewChat?.tableView.contentOffset.y
let info = (notification as NSNotification).userInfo
let value = info?[UIKeyboardFrameEndUserInfoKey]
if let rawFrame = (value as AnyObject).cgRectValue
{
let keyboardFrame = self.tableViewChat?.tableView.convert(rawFrame, from: nil)
let keyboardHeight = keyboardFrame?.height
self.bottomConstraint.constant = keyboardFrame!.size.height - (self.navigationController!.navigationBar.frame.height)
self.sendButtonBottom.constant = self.bottomConstraint.constant
let currentOffset = self.tableViewChat?.tableView.contentOffset.y
self.tableViewChat?.tableView.setContentOffset(CGPoint(x: 0, y: (currentOffset! + keyboardHeight! - 52)), animated: true)
}
}
使用递归在给定一组元素的情况下生成大小为n的所有唯一组合。