c/c++
面試之演算法系列--
列印n*n 螺旋矩陣
via和
emc都曾經筆過這個試題
輸入n,
列印n*n
矩陣比如
n = 3
,列印:
123894
765n = 4
,列印:
1234
1213145
1116156
10987
/*螺旋矩陣
*/
#include
#include
#define right0
#define down
1
#define left2
#define up3
//n*n矩陣
#define n5
void printmatrix(int *a, int n)
printf("/n");}}
void spiralmatrix(int *a, int n) // int *a
注意介面的設計}//
如果剛走過的方向為
up,
四條邊填完重新回到了起點,
步長減2,
並校正位置
if (direct == up)
//換方向
direct = (direct + 1) % 4;
}if (n == 1) //孤點
}void spiralmatrix2(int *a, int n) // int *a
注意介面的設計
}此法各個
while
中的迴圈條件都不一樣,
每走完一條邊就需要重新矯正
ij,比上面乙個方法複雜
遞迴方式,將
spiralmatrix
稍作改動,同時注意下遞迴一輪的條件和最後退出的條件即可
據此更改遞迴方式的函式介面
/*
* matrix
二維矩陣陣列*(
x,y):第乙個元素的座標
* start
:第乙個元素的值
* width
:矩陣的大小寬度
*/
void spiralmatrix3(int *matrix, int x, int y, int width, int start)
i = 0;
j = 0;
direct = right;
while(direct< up+1) //
走一圈即退出
}
direct++;
}
//走完一圈
, 步長減
2, 並校正位置
i++;
j++;
width -= 2;
spiralmatrix(matrix, x+i, y+j, width, start); //
再次跌代繼續填充
}
void main(void)
;
int *a[n];
int i;
for (i = 0; i < n; i++)
//spiralmatrix(a, n);
//spiralmatrix2(a, n);
spiralmatrix3(a, 0, 0, n, 1);
printmatrix(a, n);
printf("
按任意鍵退出
...");
getch();
}
演算法系列 列印素數 詳解
繼續演算法之旅。關於素數判定這個問題,也是乙個很經典的程式設計題目。概念 質數 prime number 又稱素數,有無限個。乙個大於1的自然數,除了1和它本身外,不能被其他自然數整除,換句話說就是該數除了1和它本身以外不再有其他的因數,否則稱為合數。分析 如果要判定乙個數自然數n n 1 是不是素...
面試衝刺演算法系列 21
看到公升序,降序等代表有序的詞就可以優先考慮二分法。設定兩個指標,分別指向第乙個k和最後乙個k,最後乙個k減去第乙個k的索引即可獲得k的個數。public class solutionif firstk 1 lastk 1 return0 public intfindfirstk int array...
面試衝刺演算法系列 40
二叉搜尋樹特點 一棵 bst 左孩子 根結點 右孩子 用於判斷 一棵 bst 的左子樹或者右子樹都是 bst 用於遞迴 後序遍歷最後乙個結點即為根結點 抓住這三個特點進行遞迴即可求解 public class solution public boolean isbst int arr,int sta...