一個算法,可是不知道名字,博客記錄一下

輸入4打印出java

1    12    11    10    
2    13    16    9    
3    14    15    8    
4    5      6      7    this

 

輸入5打印出code

1    16    15    14    13    
2    17    24    23    12    
3    18    25    22    11    
4    19    20    21    10    
5    6     7      8      9    
 get

一個逆時針循環疊加的操做,代碼以下it

import java.util.ArrayList;
import java.util.List;

public class Demo1 {
	
	private int num=0 ;
	private List<String[]> arrs  ;
	private int numSer = 0 ;

	public static void main(String[] args) {
		new Demo1().start(5);
	}
	
	public void start(int num){
		this.num = num ; 
		
		if(this.num<0){
			System.out.println("不可小於0");
			return ;  
		}
		
		arrs = new ArrayList<String[]>() ; 
		String[] itemArr= null ; 
		for(int i=0 ;i<num;i++){
			itemArr = new String[num] ; 
			arrs.add(itemArr) ; 
		}
		bot(0, -1);
		
		for(String[] items:arrs){

			for(String s:items){
				System.out.print(s+"\t");
			}
			
			System.out.println();
		}
		
	}
	//下
	private void bot(int x , int y){
		y++;
		boolean isbrek = false ; 
		int len = num -y ;
		//System.out.println("x:"+x+",y:"+y);
		if(arrs.get(y)[x]!=null){
			
			return ;
		}
		for(;y<len;y++){
			if(arrs.get(y)[x]!=null){
				isbrek = true ;
				y--;
				break ;
			}
			numSer++ ; 
			arrs.get(y)[x] = numSer+"" ;
		}
		if(!isbrek){
			y--;
		}
		right(x, y);
	}
	//右
	private void right(int x , int y){
		x++ ;
		boolean isbrek = false ; 
		int len = num - x ; 
		if(arrs.get(y)[x]!=null){
			
			return ;
		}
		for(;x<=len;x++){
			if(arrs.get(y)[x]!=null){
				isbrek = true ; 
				x--;
				break ; 
			}
			numSer++ ;
			arrs.get(y)[x] = numSer+"" ;
		}
		if(!isbrek){
			x-- ;
		}
		up(x,y) ;
		//System.out.println("x:"+x+",y:"+y);
		
	}
	//上
	private void up(int x , int y){
		y-- ;
		boolean isbrek = false ; 
		if(arrs.get(y)[x]!=null){
			
			return ;
		}
		for(;y>=0;y--){
			if(arrs.get(y)[x]!=null){
				isbrek = true ; 
				y++;
				break ;
			}
			numSer++ ; 
			arrs.get(y)[x] = numSer+"" ;
		}
		
		if(!isbrek){
			y++;
		}
		left(x, y);
		
	}
	//左
	private void left(int x , int y){
		x-- ; 
		boolean isbrek = false ; 
		if(arrs.get(y)[x]!=null){
			
			return ;
		}
		for(;x>=0;x--){
			if(arrs.get(y)[x]!=null){
				isbrek = true ; 
				x++;
				break ; 
			} 
			numSer++ ; 
			arrs.get(y)[x] = numSer+"" ; 
		}
		if(!isbrek){
			x++ ; 
		}
		bot(x, y);
	}
}

,我的紀錄class

相關文章
相關標籤/搜索