200题计划(7)

目录

1.走方格的方案数

2.井字棋


1.走方格的方案数

走方格的方案数_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b?tpId=37&&tqId=21314&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking

①题目及示例:

 ②方法解析:(主要是利用递归的思想)

主要我们通过下面这个图来进行分析

a.当m=1,n=1:

b.当m=1,n>1 || n=1,m>1

扫描二维码关注公众号,回复: 13781039 查看本文章

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.井字棋

井字棋_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/e1bb714eb9924188a0d5a6df2216a3d1?tpId=8&&tqId=11055&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking

①题目及示例:

 ②方法解析:

这个题的思路比较简单,很显然,我们只需要确定任意一行/一列/对角线上的数均为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;
        }  
    }

猜你喜欢

转载自blog.csdn.net/weixin_58850105/article/details/124010510
今日推荐