摘要:用填充一個的矩陣,該矩陣按順時針旋轉方向依次增大,用編程輸出這個數組。要求如下我的思路先生成一個一維的數組這里實現的算法是通過略微修改了然后通過算法實現變化對應賦值方式有點蠢,通過實現還有有所收獲的完整
Q:用0-9填充一個N*N的矩陣,該矩陣按順時針旋轉方向依次增大,用js編程輸出這個數組。要求如下:
我的思路先生成一個一維的數組;
這里實現的算法是通過略微修改了d3.range();
function range_(start, stop, step) { if (arguments.length < 3) { step = 1; if (arguments.length < 2) { stop = start; start = 0; } } if ((stop - start) / step === Infinity) throw new Error("infinite range"); var range = [], k = range_integerScale(Math.abs(step)), i = -1, j; start *= k, stop *= k, step *= k; if (step < 0) while ((j = start + step * ++i) > stop) range.push(range_interger_10(j / k)); else while ((j = start + step * ++i) < stop) range.push(range_interger_10(j / k)); return range; }; function range_integerScale(x) { var k = 1; while (x * k % 1) k *= 10; return k; } function range_interger_10(a) { a = a >= 10 ? range_interger_10(a % 10) : a; return a; }
然后通過算法實現index變化;對應賦值;方式有點蠢,通過實現還有有所收獲的;
var c = { "index": 1, "fuhao": -1 } var r = { "index": 1, "fuhao": -1 } var step = n - 1; var jo = 0; var i = 1; var _ = 0; var direction = { 0: function() { c["fuhao"] = -Math.abs(c["fuhao"]) return c }, 1: function() { r["fuhao"] = -Math.abs(r["fuhao"]) return r }, 2: function() { c["fuhao"] = Math.abs(c["fuhao"]) return c }, 3: function() { r["fuhao"] = Math.abs(r["fuhao"]) return r } } var cishu = 0; while (i <= cell.length) { arr[r["index"] - 1][c["index"] - 1] = cell[i - 1]; var step_num = Math.floor((i - 1) / ((n - 1) * 3)) == 0 ? 3 : 2; if (i - jo <= step) { var s = direction[_ % 4](); s["index"] = s["index"] - s["fuhao"] if (i - jo == step) { _++; jo = i; cishu++; if (cishu == step_num) { step--; cishu = 0 } } } i++ }
完整code
function circleNum(n) { var arr = new Array(n); for (var i = 0; i < arr.length; i++) { arr[i] = new Array(n); }; // var length = n * n; var cell = range_(length) console.log(cell) var c = { "index": 1, "fuhao": -1 } var r = { "index": 1, "fuhao": -1 } var step = n - 1; var jo = 0; var i = 1; var _ = 0; var direction = { 0: function() { c["fuhao"] = -Math.abs(c["fuhao"]) return c }, 1: function() { r["fuhao"] = -Math.abs(r["fuhao"]) return r }, 2: function() { c["fuhao"] = Math.abs(c["fuhao"]) return c }, 3: function() { r["fuhao"] = Math.abs(r["fuhao"]) return r } } var cishu = 0; while (i <= cell.length) { arr[r["index"] - 1][c["index"] - 1] = cell[i - 1]; var step_num = Math.floor((i - 1) / ((n - 1) * 3)) == 0 ? 3 : 2; if (i - jo <= step) { var s = direction[_ % 4](); s["index"] = s["index"] - s["fuhao"] if (i - jo == step) { _++; jo = i; cishu++; if (cishu == step_num) { step--; cishu = 0 } } } i++ } function range_(start, stop, step) { if (arguments.length < 3) { step = 1; if (arguments.length < 2) { stop = start; start = 0; } } if ((stop - start) / step === Infinity) throw new Error("infinite range"); var range = [], k = range_integerScale(Math.abs(step)), i = -1, j; start *= k, stop *= k, step *= k; if (step < 0) while ((j = start + step * ++i) > stop) range.push(range_interger_10(j / k)); else while ((j = start + step * ++i) < stop) range.push(range_interger_10(j / k)); return range; }; function range_integerScale(x) { var k = 1; while (x * k % 1) k *= 10; return k; } function range_interger_10(a) { a = a >= 10 ? range_interger_10(a % 10) : a; return a; } for (var ii = 0; ii < n; ii++) { console.log(arr[ii]) } return arr; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87074.html
摘要:用填充一個的矩陣,該矩陣按順時針旋轉方向依次增大,用編程輸出這個數組。個人覺得這個思路不是最優解,各位路過的高手如果有更好思路,望不吝賜教。請輸入代碼此處可給賦值即可,比如生成矩陣,就等于 Q:用0-9填充一個N*N的矩陣,該矩陣按順時針旋轉方向依次增大,用js編程輸出這個數組。要求如下:showImg(https://segmentfault.com/img/bVJ5Uf?w=210...
摘要:螺旋矩陣給定一個包含個元素的矩陣行列,請按照順時針螺旋順序,返回矩陣中的所有元素。每次轉向或都會自減。循環可操作性很高,可以直接操作索引坐標改變遍歷方式,不再贅述。 54:Spiral Matrix 螺旋矩陣 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix i...
摘要:螺旋矩陣給定一個包含個元素的矩陣行列,請按照順時針螺旋順序,返回矩陣中的所有元素。每次轉向或都會自減。循環可操作性很高,可以直接操作索引坐標改變遍歷方式,不再贅述。 54:Spiral Matrix 螺旋矩陣 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix i...
摘要:分布式的管理和當我在談論架構時我在談啥狀態碼詳解無狀態協議和請求支持哪些方法分層協議棧有哪些數據結構運用場景說說你常用的命令為什么要有包裝類面向對象的特征是啥是啥有什么好處系統設計工程在線診斷系統設計與實現索引背后的數據結構及算法原理軟技能 HTTP 【HTTP】分布式session的管理 【HTTP】Cookie和Session 【HTTP】當我在談論RestFul架構時我在談啥?...
摘要:代碼添加該圈第一行添加最后一列添加最后一行添加第一列如果是奇數,加上中間那個點后續如果在中,給出的是和來代表行數和列數,該如何解決和的本質區別就是一個是任意長方形,一個是正方形,所以中不需要判斷最后一行或者最后一列。 Spiral Matrix I Given a matrix of m x n elements (m rows, n columns), return all ele...
閱讀 3537·2021-09-10 10:51
閱讀 2507·2021-09-07 10:26
閱讀 2482·2021-09-03 10:41
閱讀 810·2019-08-30 15:56
閱讀 2896·2019-08-30 14:16
閱讀 3488·2019-08-30 13:53
閱讀 2103·2019-08-26 13:48
閱讀 1913·2019-08-26 13:37