C C 面試之演算法系列 列印 N N 螺旋矩陣

2021-04-20 16:56:59 字數 1819 閱讀 1011

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...