原帖見:深圳一家公司面試問題,很囧
題目要求列印乙個迴旋數字矩陣
int i=5;
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
int i=6
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
我的解題思路分析:
1.將此矩陣分解為乙個乙個的圈,如下圖,1-20可以看成乙個圈,21-32是乙個圈,33-36也是乙個圈。
2.再將圈分解為四個均等的數列
3.列印的過程中用乙個二維陣列儲存矩陣,記錄圈數,當前圈的數列長度和圈開始計數的數字。如i=6,第1圈時數列長為5,開始計數的數字為0;第2圈數列長為3,開始計數的數字為20;從這些規律總結出,已知變長為i,假設當前圈數為count,則數列長step=i-1-count*2
程式**:
package snakematrix;
/** * @author heis
* @date dec 11, 2009
*/public class snakenum
/***
* 演算法複雜度為n
* 以下的演算法,在for迴圈內的一些計算是不必要的,可以用變數儲存,但是為了**更加直觀,就不做優化了。
* * @param i 矩陣邊長
*/public static int fill(int i)
} long timeused=system.currenttimemillis()-starttime;
system.out.println("總用時:"+timeused+"ms");
return array; }
/*** 列印陣列
* * @param array
*/public static void print(int array)
/***
* 演算法複雜度為n
* @param i 矩陣邊長
*/public static int fill(int i)
} long timeused=system.currenttimemillis()-starttime;
system.out.println("總用時:"+timeused+"ms");
return array; }
/*** 列印陣列
* * @param array
*/public static void print(int array){
if(array!=null){
int n=array.length;
int i=0,j;
int count=integer.valueof(n*n).tostring().length()+1;
for(;i回帖還有另外一種思路,也是用乙個二維陣列儲存陣列,按照數列順序輸出,在輸出過程中判斷輸出的方向,可以看這裡的**?page=1#1288013
迴旋矩陣 java演算法
最近要換份工作或者在家休息一段時間,所以練練常用的面試演算法題,說是原創也不完全是。不過確實是看了演算法後,自己重新實現了一遍。package com.liuliu.matrix public class shunxu public static void initialarray value pu...
演算法 劍指offer easy的題解題思路
1.劍指 offer 53 ii.0 n 1中缺失的數字 乙個長度為n 1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0 n 1之內。在範圍0 n 1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。有順序陣列,應該找到關係使用二分查詢 class solution else...
KMP演算法解題思路
bf暴力演算法進行模式匹配由於需要回溯,導致演算法效率低,kmp演算法對其進行改進的一點就是在某趟匹配失敗後,主串不進行回溯,而子串回溯到某乙個位置k。子串的每乙個位置都對應著乙個k,要找出這些值,首先列出子串所有的字首,分別對每個字首找出其最長公共前字尾 需注意,最長公共前字尾必須小於原字首且要相...