说我有一个整数。任何整数。任意示例:6
。
是否有一种干净的方法可以对可能的方法进行网格化,以便在一定范围内到达6
?
说1-9
。
如果我有6
,如何获得5+1, 2+4, 3+3, 9-3, 7-1, 8-2
等的数组?
也许输出看起来像
[5,1],[2,4],[3,3],[9,3]
等
实际上任何方法都可以,我可以弄清楚输出实际返回该类型函数的方式后会弄乱输出。
答案 0 :(得分:2)
你可以做
public class DictionaryActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dictionary);
返回import math
def get_combinations(number, minimum, maximum):
ret = []
for x in range(minimum, math.ceil(number/2)):
ret.append((x, number - x))
for x in range(maximum - number):
ret.append((maximum - x, maximum - (number + x)))
return ret
中的list
个
我们来看看:
tuple
这只是定义要返回的数组,因此我们可以向其中添加内容。
ret = []
循环遍历所有可能的添加剂组合。此操作通过以下列表进行:
for x in range(minimum, math.ceil(number/2)):
但是,它最多只占数字的一半(四舍五入);没关系,因为就我们的目的而言,(1, x-1), (2, x-2), ..., (n, x-n)
和(1, 6)
是相同的,我们不应同时包含两者。
(6, 1)
这只是ret.append((x, number - x))
的Python表示形式。
(n, x-n)
循环遍历所有可能的减法组合。 此遍历此列表:
for x in range(maximum - number):
继续!
(maximum, maximum - x), (maximum - 1, maximum - (x + 1)), ..., (maximum - n, maximum - (x + n))
同样,只是ret.append((maximum - x, maximum - (number + x)))
的Python表示形式。
(maximum - n, maximum - (x + n))
最后,返回完成的列表。
答案 1 :(得分:0)
# checks for valid tuple
def valid_tuple(min_val, max_val, x):
i,j = x
return i>=min_val and i<=max_val and j>=min_val and j<=max_val
def combinations(sum_val, max_val, min_val):
result = [(i, sum_val-i) for i in range(min_val, max_val)]
result = filter(lambda x: valid_tuple(min_val, max_val, x) , result)
return list(result)
combinations (6, 9,0)
# [(0, 6), (1, 5), (2, 4), (3, 3), (4, 2), (5, 1), (6, 0)]