用Swift3实现从中心开始,逆时针打印 n*n 矩阵

来源:互联网 发布:单反照片导入mac 编辑:程序博客网 时间:2024/06/05 17:32

从中心开始,逆时针打印 n*n 矩阵例如:[ 0, 1, 2, 3][ 4, 5, 6, 7][ 8, 9, 10, 11][ 12, 13, 14, 15]输出:6,5,9,10,11,7,3,2,1,0,4,8,12,13,14,15func printNN( n:Int){ var row = 0 ; var col = 0; if(n%2==0){//偶数行时 row = n/2; col = row + 1; }else{//奇数行时 row = (n+1)/2 col = row } var k = n - col //与外围相差多少个数字 var s = "";//最终的字符串 if(k<0){ // n = re1 时 print("0") return } while(k > -1){ for d in 0..<4{ switch(d){ case 0 ://向上 // int i = row-1 let m = row - 2 ; if m >= 0 && m > k - 1 { var j = k if j < 0 { j = 0 ; } for i in (j ... m).reversed(){ if(s == ""){ s = rowCol(row: i,col: col-1,n: n) }else{ s = s + "," + rowCol(row: i,col: col-1,n: n) } } row = k + 1 ; col = col - 1 ; print(s + "===\(d)" ) } break; case 1 ://向左 let m = col-1 if m >= 0 && m > k - 1 { if n % 2 == 1 && m <= k { break } for i in (k ... m).reversed(){ if(s == ""){ s = rowCol(row: row-1,col: i,n: n) }else{ s = s + "," + rowCol(row: row-1,col: i,n: n) } } row = row + 1 ; col = k + 1 ; print(s + "===\(d)" ) } break; case 2 ://向下 let m = row - 1 let j = n-k if m < j - 1 && m>=0{ for i in m ..< j { if(s == ""){ s = rowCol(row: i,col: col-1,n: n) }else{ s = s + "," + rowCol(row: i,col: col-1,n: n) } } row = n - k ; col = col + 1 ; print(s + "===\(d)" ) } break; case 3 ://向右// int i = let m = col - 1 var j = n - k if k > 0 { j = j + 1 } if m <= j - 1 && m >= 0 { for i in m ..< j { if(s == ""){ s = rowCol(row: row-1,col: i,n: n) }else{ s = s + "," + rowCol(row: row-1,col: i,n: n) } }// row = row - 1 ; col = n - k + 1 ; print(s + "===\(d)" ) } break; default: break; } } k -= 1; } print(s)}func rowCol(row:Int , col:Int,n:Int )->String{ return String(row * n + col)}printNN(n: 6)

0 0
原创粉丝点击