我了解了pascal的三角形,并用Java(O2)复杂度打印出一个
现在,对于下一部分,我必须找到形成曲棍球棒图案的数字序列,我被困在这里。任何帮助都会很棒!
同样this link将帮助您了解帕斯卡三角形中曲棍球棒图案的含义。
下面是我写的返回三角形的代码
int[][] printPascal(int n)
{
int[][] arr= new int[n][n];
for(int line=0;line<n;line++)
{
for(int i=0;i<=line;i++)
{
if(line==i|| i==0)
{
arr[line][i]=1;
}
else
{
arr[line][i]=arr[line-1][i-1]+arr[line-1][i];
}
System.out.print(arr[line][i]+" ");
}
System.out.println();
}
return arr;
}
我尝试做某事但我得到的是arrayIndexOutOfBound
void printSequence(int[][]arr)
{
int n= arr.length;
Map<Integer, List<Integer>> map =new HashMap<>();
List<Integer> sequence= new ArrayList<>();
for(int i=0;i<=n;i++)
{
int count=0;
int res=0;
for(int line=0;line<n;line++)
{
sequence.add(arr[line][i]);
res=sumList(sequence);
if(res!=arr[line+1][i+1])
{
sequence=new ArrayList<>();
continue;
}
else
{
List<Integer> resSeq= new ArrayList<>(sequence);
resSeq.add(arr[line+1][i+1]);
map.put(++count, resSeq);
res=0;
}
}
}
}
我需要找到满足规则的所有序列
nCr的+(N + 1)的Cr +(N + 2)的Cr + ..... +(N + K)的Cr =(N + K + 1)的Cr
如果在Pascal的三角形上标记这些序列将类似于曲棍球棒。
以下是我的解决方案的样子
void hockeyNumbers(int[][] arr) {
int n = arr.length;
List<Integer> sequence;
Map<Integer, List<Integer>> map = new HashMap<>();
int count = 0;
for (int i = 0; i < n; i++) {
int res = 0;
sequence = new ArrayList<>();
for (int line = i; line < n - 1; line++) {
sequence.add(arr[line][i]);
res = sumList(sequence);
if (res == arr[line + 1][i + 1]) {
List<Integer> resSeq = new ArrayList<>(sequence);
resSeq.add(arr[line + 1][i + 1]);
if (resSeq.size() > 2) {
map.put(++count, resSeq);
}
res = 0;
}
}
}
}
答案 0 :(得分:0)
我已经解决了这个问题,看起来如下所示。我将所有序列存储在一个hashmap中供以后使用。
void hockeyNumbers(int[][] arr) {
int n = arr.length;
List<Integer> sequence;
Map<Integer, List<Integer>> map = new HashMap<>();
int count = 0;
for (int i = 0; i < n; i++) {
int res = 0;
sequence = new ArrayList<>();
for (int line = i; line < n - 1; line++) {
sequence.add(arr[line][i]);
res = sumList(sequence);
if (res == arr[line + 1][i + 1]) {
List<Integer> resSeq = new ArrayList<>(sequence);
resSeq.add(arr[line + 1][i + 1]);
if (resSeq.size() > 2) {
map.put(++count, resSeq);
}
res = 0;
}
}
}
}
答案 1 :(得分:0)
我尝试通过具有某些边界条件的帕斯卡三角形找到曲棍球棒。(0 现在,创建Pascal's triangle is using Binomial coefficients的一种方法。 接着,我们可以得到曲棍球棒。为此,我们不需要创建完整的三角形。您只需要曲棍球的行号和长度。
我们知道,曲棍球杆始终以1开头,该行的第二个索引将是行号本身。
因此,现在,我们已经有了曲棍球棒 1和(Row + 1)的两个值。
下一个值可以使用以下项通过二项式系数生成:
C(线,i)= C(线,i-1)*(线-i + 1)/ i 我认为这应该有所帮助。 private static void hockeyStick(int row, int length) {
System.out.println("Hockey stick statring from " + row);
List<Integer> finalResult = new ArrayList<>(Arrays.asList(1, ++row));
int oldValue = 1;
int newValue = row;
int sum = row + 1;
for (int i = 2; i < length - 1; i++) {
finalResult.add(newValuebimialCoefficient(oldValue + newValue, i, ++row));
oldValue += newValue;
newValue = finalResult.get(i);
sum += newValue;
}
finalResult.add(sum);
System.out.println(finalResult);
}
private static int newValuebimialCoefficient(int oldValue, int index, int line) {
return (oldValue * (line - index + 1) / index);
}