以交替方块填充2D数组

时间:2015-04-30 22:20:40

标签: javascript jquery arrays

您有一个值n,它将确定2D数组或表的维度。然后你应该将数组或表从外层填充到中心一次用一个填充,一次用零填充到没有其他元素要写入的点。

N = 5   n=5

N = 6   n=6

现在已经尝试了很长时间了,不胜感激任何帮助。能够填补这个界限了。

我的最新代码:

function fillArray(n) {
    var exArray = [];
    var html = '';
    for (var i = 0; i < n; i++) {
        html+= '<tr>';
        exArray[i] = [];
        for (var j = 0; j < n; j++) {
            exArray[i][j] = 0;
            if(i%(n-1)==0 || j%(n-1)==0) {
                exArray[i][j] = 1;
            }
            html+='<td class="text-center">'+exArray[i][j]+' ['+i+','+j+']</td>';
        };
        html+= '</tr>';
    };
    return html;
}

1 个答案:

答案 0 :(得分:5)

我认为最简单的方法是只考虑左上象限,并通过对称填充其他象限:

var arr = Array(n);
for(var i=0; i<n/2; ++i) {
    arr[  i  ] = new Array(n);
    arr[n-1-i] = new Array(n);
    for(var j=0; j<n/2; ++j)
        arr[  i  ][j] = arr[  i  ][n-1-j] =
        arr[n-1-i][j] = arr[n-1-i][n-1-j] =
        + !(Math.min(i,j) % 2);
}

function fillArray(n) {
  var arr = Array(n);
  for(var i=0; i<n/2; ++i) {
    arr[  i  ] = new Array(n);
    arr[n-1-i] = new Array(n);
    for(var j=0; j<n/2; ++j)
      arr[  i  ][j] = arr[  i  ][n-1-j] =
      arr[n-1-i][j] = arr[n-1-i][n-1-j] =
      + !(Math.min(i,j) % 2);
  }
  var table = document.createElement('table');
  for(var i=0; i<n; ++i) {
    var row = table.insertRow();
    for(var j=0; j<n; ++j)
      row.insertCell().textContent = arr[i][j];
  }
  return table;
}
document.body.appendChild(fillArray(9));
td {
  width: .8em;
  height: .8em;
  line-height: .8em;
}