zoukankan      html  css  js  c++  java
  • LeetCode 面试题 16.04. 井字游戏 Java

    一看到井字棋游戏最先想到决策树,这个题是直接判断输赢。注意不是9个格子,是N*N个格子。那么第一步应该把一维数组放到二维数组中,否则无法遍历。

    遇到X,转换成1。遇到O,转换成-1。否则为0
    遍历二维数组的每一行,每一列,两条对角线。如果和为N,则输出"X",和为-N,则输出"O"。遍历时需要保存0的数量,用于判断还有没有空位。flag表示有无胜利者。

    class Solution {
        public String tictactoe(String[] board) {
            int n = board.length;
            int ox[][] = new int[n][n];
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    if(board[i].charAt(j) == 'X'){
                        ox[i][j] = 1;
                    }else if(board[i].charAt(j) == 'O'){
                        ox[i][j] = -1;
                    }else{
                        ox[i][j] = 0;
                    }
                }
            }
            return win(ox);
        }
    
        public String win(int nums[][]){
            int n=nums.length;
            int rowsum=0,colsum=0,zeronum=0,diagonal1=0,diagonal2=0;
            boolean flag=false;
            for(int i=0;i<nums.length;i++){
                rowsum=0;
                for(int j=0;j<nums.length;j++){
                    if(nums[i][j]==0){
                        zeronum++;
                    }
                    rowsum+=nums[i][j];
                    if(i==j){
                        diagonal1+=nums[i][j];
                    }
                }
                if(rowsum==n){
                    flag=true;
                    return "X";
                }
                if(rowsum==-n){
                    flag=true;
                    return "O";
                }
            }
            if(diagonal1==n){
                flag=true;
                return "X";
            }
            if(diagonal1==-n){
                flag=true;
                return "O";
            }
            for(int j=0;j<n;j++){
                colsum=0;
                for(int i=0;i<n;i++){
                    colsum+=nums[i][j];
                    if(i+j==n-1){
                        diagonal2+=nums[i][j];
                    }
                }
                if(colsum==n){
                    flag=true;
                    return "X";
                }
                if(colsum==-n){
                    flag=true;
                    return "O";
                }
            }
            if(diagonal2==n){
                flag=true;
                return "X";
            }
            if(diagonal2==-n){
                flag=true;
                return "O";
            }
            if(!flag){
                if(zeronum==0){
                    return "Draw";
                }else{
                    return "Pending";
                }
            }
            return null;
        }
    }
    
  • 相关阅读:
    列表的内置方法
    oracle安装教程
    大二暑假假期周进度01
    win 10安装Linux虚拟机教程
    需求工程——软件建模与分析阅读笔记05
    网络爬虫阅读笔记01
    Java 测试连接Oracle数据库是否成功,ojdbc7.jar包下载
    河北创新年报统计平台系统整体界面展示,与数据下钻
    java 三大框架 struct2部分 实现增删该查操作
    itextsharp生成pdf
  • 原文地址:https://www.cnblogs.com/yu-jiawei/p/12991166.html
Copyright © 2011-2022 走看看