目录
1.走方格的方案数
①题目及示例:
②方法解析:(主要是利用递归的思想)
主要我们通过下面这个图来进行分析
a.当m=1,n=1:
b.当m=1,n>1 || n=1,m>1
c.当m>1,n>1时(这里以3x3为例) ;这个递归的结束条件就是(m=1||n=1,所以当我们递归到m=1||n=1时递归就可以停止,就可以向上进行返回)
③代码:
import java.util.*; public class Main{ public static void main(String[]args){ Scanner sc=new Scanner(System.in); int m=sc.nextInt(); int n=sc.nextInt(); System.out.println(load(m,n)); } public static int load(int m,int n){ if((m==1&&n>=1)||(n==1&&m>=1)){ return m+n; } return load(m-1,n)+load(m,n-1); } }
2.井字棋
①题目及示例:
②方法解析:
这个题的思路比较简单,很显然,我们只需要确定任意一行/一列/对角线上的数均为1,即和为n(n为二维数组的长度),就可以判断它胜出,那么就只用分四种情况,行中,列中,主对角线和副对角线,要是均不存在这种情况,则返回false;
③代码:(代码中需要注意sum的位置,没一种新的情况前需要将sum置为0,但是置为0 这种情况是要在每行(列)累加后。)
import java.util.*; public class Board { public boolean checkWon(int[][] board) { // write code here int len=board.length; int sum=0; int i=0; int j=0; for(i=0;i<len;i++){ for(j=0;j<len;j++){ //①判断行是否直接胜出 sum+=board[i][j]; if(sum==len){ return true; } } }//②判断列是否直接胜出 for(i=0;i<len;i++){ sum=0; for(j=0;j<len;j++){ sum+=board[j][i]; if(sum==len){ return true; } } }//③判断主对角线是否直接胜出 sum=0; for(i=0;i<len;i++){ sum+=board[i][i]; if(sum==len){ return true; } }//④判断副对角线是否直接胜出 sum=0; for(i=0;i<len;i++){ sum+=board[i][len-1-i]; if(sum==len){ return true; } }return false; } }