对于我的代码,直到第5行,我的三角形的格式很好。但是一旦我到达第六行,格式就变得有趣了,因为我开始有两位数。有办法解决这个问题吗?
我的代码也是优化的吗?有什么办法可以让它更好吗?
谢谢!
function pascals(num) {
var result = [[1],[1,1]];
if (num === 0) {
console.log(0);
}
if (num === 1) {
console.log(1);
}
else {
for (var i = 2; i < num; i++) {
result[i] = [];
result[i][0] = 1;
for (var j = 1; j < i; j++) {
result[i][j] = result[i - 1][j - 1] + result[i - 1][j];
}
result[i][j] = 1
}
}
for (var i = 0; i < result.length; i++) {
console.log(' '.repeat(result.length - i) + result[i]);
}
}
pascals(6) 1
1,1
1,2,1
1,3,3,1
1,4,6,4,1
1,5,10,10,5,1发布于 2019-05-07 04:28:58
数位数就是把它扔出去的原因。我通常通过选择找到最高的数字,然后适当地抵消其余的数字来解决这个问题。我在用多项式三角形乱搞的时候就这么做了。
首先,我得到了最长的可能的数字,然后在前面加上空格,以使其正确排列。
最近,您必须修复预追加,以便它看起来比大小2更好。这是在一个相当奇怪的算法上完成的。
至于其余的代码,我没有时间看它,但稍后会。
总的来说,您的代码看起来相当不错。这里有一些建议。
我继续前进,并将pascal数组生成转移到另一个函数。函数的思想是它执行一项任务。逻辑上,将这些任务分解为多个函数,限制了每个函数的大小,增加了可读性。在这里,我们可以将它赋值给pascal函数中的一个变量。我使用了直观的名称generatePascalArrays,因此您可以从变量赋值中获得函数所做的操作的要点。
其次,我注意到您将1和0的异常情况分开,我将其合并为一个if和console.log(num)。
此外,我确实使用了一些箭头函数。在其他语言中,您可能听说过它们是lambda函数。如果你不熟悉他们,这里有一个链接。
function generatePascalArrays(num) {
var result = [[1],[1,1]];
for (var i = 2; i < num; i++) {
result[i] = [];
result[i][0] = 1;
for (var j = 1; j < i; j++) {
result[i][j] = result[i - 1][j - 1] + result[i - 1][j];
}
result[i][j] = 1;
}
return result;
}
function pascals(num) {
if (num <= 1) {
console.log(num);
}
var result = generatePascalArrays(num),
width = Math.max(...result[result.length-1]).toString().length;
for (var i = 0; i < result.length; i++) {
let preOffsetter = result[result.length-i-1].length * Math.floor(width/3) + result.length - i
console.log(' '.repeat(preOffsetter) + result[i].map((x) => ' '.repeat(width - x.toString().length) + x));
}
}
pascals(5)
pascals(6)
pascals(10)https://codereview.stackexchange.com/questions/219841
复制相似问题