* @param { Number } m, 矩阵的宽
* @param { Number } n,矩阵的长
* @param { Number } initialValue,初始值
* @returns { Array } 数组
*/
function buildCyclicRectangle(m, n, initialValue) {
var result = [],
startM = 0,
endM = m-1,
startN = n-1,
endN = 0,
num = initialValue,
i;
for(var i = 0; i < n; i++){
result[i] = [];
}
var isMLessEqualN = m <= n;
if(!m || !n) return [];
if(m == n && (m == 1)) return [[initialValue]];
while(isMLessEqualN && (startM < endM) || !isMLessEqualN &&(endN < startN)){
for(i = startM; i <= endM; i++){
result[startM][i] = num;
num++;
}
for(i = endN+1; i <= startN; i++){
result[i][endM] = num;
num++;
}
for(i = endM-1; i>= startM; i--){
result[startN][i] = num;
num++;
}
for(i = startN-1; i > endN; i--){
result[i][startM] = num;
num++;
}
startM++;
endM--;
startN--;
endN++;
}
if(isMLessEqualN && startM == endM){
for(i = endN; i <= startN;i++){
result[i][startM] = num;
num++;
}
}
if(!isMLessEqualN && startN == endN){
for(i = startM; i <= endM; i++){
result[startN][i] = num;
num++;
}
}
return result;
}
var result = buildCyclicRectangle(10,10,1);
console.log(result);