JS實現順時針列印陣列
序
今天中午吃飯的時候,遇到了一位同學,平時關係還算不錯,最近他在準備面試,有一道面試題提了出來,就是關於5*5矩陣順時針列印的問題。他是學習C語言和c++語言的,而我主要學習JavaScript。但是這有什麼關係。這道題主要考察的是演算法和判斷邊界問題。不論什麼語言都可以實現的。每一門語言都有其獨特的解決問題的場景,比如我學的JavaScript,在瀏覽器這塊沒有其他語言比它更加合適了。學習語言到最後,基本上核心就是演算法和資料結構。新的問題產生,如何用簡單高效的方法用語言解決,這是需要不斷學習的。
過程
在吃飯的時候想了想。第一個想法就是用陣列表示矩陣,然後遍歷陣列,重新組成一個新的字串,就得到我們想要的結果了。這個思路很簡單,就是不斷遍歷,將外圍的一圈遍歷完後,繼續裡面的一圈。而且需要判斷邊界問題。這也是自己在最後才明白這道面試題的考察點。吃飯結束後,回來在電腦上試了試,最開始就卡在二維陣列的問題上,JavaScript中是動態陣列,與之前學習的C語言陣列還是有點區別的。於是取巧,再函式內宣告一個陣列,不需要再次輸入。原本面試題還需要輸入陣列,然後再得出結果的。這個就不是重點了,重要的是如何將陣列順時針列印出來。
反正就是慢慢試,將一個3*3陣列慢慢列印出來,用了四個for迴圈。沒有考慮邊界檢查,也沒有函式的概念,結果是出來了,雖然是3*3陣列,但是距離5*5還遠嗎?
確實,需要承認的是,還有好遠的額!我那個程式碼我都不想再看了,實在有點糟糕。沒有邊界檢查,很容易出現錯誤,而且如果變成4*4或者其他的,就又要寫一堆的廢程式碼。接下來認真想了想,於是將處理過程放在一個函式中,並用遞迴的思想將其實現。程式立馬不一樣了,提高了可用性。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>順時針列印陣列</title>
</head>
<body>
<script type="text/javascript">
window.onload = function() {
var columns=4,rows=4,start=0;//行 列 起始位置
var array=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]];//定義二維陣列
var result=new Array();
printArray(array,columns,rows,start);
document.write(result.split(","))
function printArray(array,columns,rows,start){
if(columns < 1 || rows < 1 || start < 0 )
return;
if( columns <= 2*start || rows <= 2*start )
return;
var stopX = columns - 1 - start;//一圈最右列在座標中的位置
var stopY = rows - 1 - start;//一圈最大行在座標中位置
//列印此圈中的最上行
for(var i=start; i<=stopX; i++)
result+=array[start][i]+",";
//列印此圈中的最右列
if(start < stopX) //如果此圈中不止有一列
for(var i=start+1; i<=stopY; i++)
result+=array[i][stopX]+",";
//列印次圈中的最下行
if(start < stopX && start < stopY)
for(var i=stopX-1; i >= start; i--)
result+=array[stopY][i]+",";
//列印次圈中的最左行
if(start < stopX && start < stopY - 1)
for(var i=stopY-1; i >= start+1; i--)
result+=array[i][start]+",";
printArray(array,columns,rows,start+1);//下一圈迴圈
}
}
</script>
</body>
</html>
結果
測試結果沒有問題,當然這個問題還有不用遞迴的解法,暫時就寫在這裡,歡迎各位大神指點程式碼不足之處,共同進步。
相關文章
- 順時針列印矩陣矩陣
- 【劍指offer】順時針列印矩陣矩陣
- Java 實現順時針螺旋二維陣列輸出Java陣列
- 劍指offer-19:順時針列印矩陣矩陣
- JZ-019-順時針列印矩陣矩陣
- 劍指offer面試題29:順時針列印矩陣面試題矩陣
- 第四章:多維陣列和矩陣 --------------- 4.1 基礎題:順時針列印二維陣列陣列矩陣
- 劍指 Offer 29-順時針列印矩陣c++矩陣C++
- 力扣 - 劍指 Offer 29. 順時針列印矩陣力扣矩陣
- [每日一題] 第二十一題:順時針列印矩陣每日一題矩陣
- Python練習-LeetCode 第1篇 順時針列印矩陣PythonLeetCode矩陣
- 劍指offer之順序列印陣列陣列
- JS實現陣列去重JS陣列
- JS陣列去重的實現JS陣列
- 1,2,3…n*n 的數字按照順時針螺旋的形式列印成矩陣(遞迴)矩陣遞迴
- js實現資料結構--陣列JS資料結構陣列
- js將陣列中元素的順序打JS陣列
- 二維陣列笛卡爾積js實現陣列JS
- 精讀《JS 陣列的內部實現》JS陣列
- js如何實現拷貝一個陣列JS陣列
- JS陣列去重演算法實現JS陣列演算法
- js打亂陣列順序程式碼例項JS陣列
- js實現的陣列自定義排序介紹JS陣列排序
- 理順 JavaScript (11) - 陣列JavaScript陣列
- 多執行緒實現順序迴圈列印執行緒
- js實現的字串和陣列的相互轉換JS字串陣列
- js將陣列元素順序倒轉程式碼例項JS陣列
- 陣列排序的實現陣列排序
- golang實現稀疏陣列Golang陣列
- JS陣列JS陣列
- JS實現瀏覽器列印WordJS瀏覽器
- JavaScript 陣列順序打亂JavaScript陣列
- JS陣列去重 – JSON陣列去重陣列JSON
- js實現從陣列中取出一個隨機項JS陣列隨機
- js實現的陣列和CSV格式的相互轉換JS陣列
- JS實現陣列去重方法總結(六種方法)JS陣列
- python中怎麼列印陣列Python陣列
- js實現在陣列的在陣列的開頭和結尾新增或者刪除元素JS陣列