LeetCode - 794 - 有效的井字游戏 - java

x33g5p2x  于2021-12-10 转载在 Java  
字(2.6k)|赞(0)|评价(0)|浏览(404)

题目要求 和 大意

代码

正常代码风格

  1. class Solution {
  2. public boolean validTicTacToe(String[] board) {
  3. int x = 0,o = 0;// o 和 x 的棋子数
  4. boolean playerx=false,playero=false;// 玩家x 和 玩家o
  5. // 棋子数量
  6. for(String s:board){
  7. for(int i =0;i<3;i++){
  8. char ch = s.charAt(i);
  9. if(ch == 'X'){
  10. x++;
  11. }else if(ch == 'O'){
  12. o++;
  13. }
  14. }
  15. }
  16. if(o==1 && x==0){
  17. return false;
  18. }
  19. if(x-1>o || o>x){
  20. return false;
  21. }
  22. // 斜线
  23. if(board[0].charAt(0) == board[1].charAt(1) && board[1].charAt(1) == board[2].charAt(2)){
  24. if(board[0].charAt(0) == 'X'){
  25. playerx = true;
  26. }else if(board[0].charAt(0) == 'O'){
  27. playero = true;
  28. }
  29. }
  30. if(board[0].charAt(2) == board[1].charAt(1) && board[1].charAt(1) == board[2].charAt(0)){
  31. if(board[0].charAt(2) == 'X'){
  32. playerx = true;
  33. }else if(board[0].charAt(2) == 'O'){
  34. playero = true;
  35. }
  36. }
  37. // 横着
  38. for(String s: board){
  39. boolean flag = true;
  40. char c1 = s.charAt(0);
  41. for(int i=1;i<3;i++){
  42. char c2 = s.charAt(i);
  43. if(c1!=c2){
  44. flag=false;
  45. break;
  46. }
  47. }
  48. if(c1 == 'X'&& flag){
  49. playerx = true;
  50. }
  51. else if(c1 == 'O'&& flag){
  52. playero = true;
  53. }
  54. }
  55. // 竖着
  56. for(int i =0;i<3;i++){
  57. boolean flag = true;
  58. char c1 = board[0].charAt(i);
  59. for(int j = 1; j < 3;j++){
  60. String s = board[j];
  61. if(s.charAt(i) != c1){
  62. flag = false;
  63. break;
  64. }
  65. }
  66. if( c1 == 'X'&& flag){
  67. playerx =true;
  68. }else if(c1 == 'O'&&flag){
  69. playero = true;
  70. }
  71. }
  72. // 判断 玩家是否这很的胜利
  73. if(playerx){
  74. if(x<=o){// playerx 先下,如果胜出,棋子数量比 player0 多
  75. return false;
  76. }
  77. }
  78. if(playero){
  79. if(x!=o){// player0 后下,如果胜出,棋子数量跟 playerx 一样多
  80. return false;
  81. }
  82. }
  83. return (playero && playerx)?false:true;
  84. }
  85. }

简约风格(就是能省的符号,就省。能成一行的代码就写成一行)

  1. class Solution {
  2. public boolean validTicTacToe(String[] board) {
  3. int x = 0,o = 0;// o 和 x 的棋子数
  4. boolean playerx=false,playero=false;// 玩家x 和 玩家o
  5. // 棋子数量
  6. for(String s:board){
  7. for(int i =0;i<3;i++){
  8. char ch = s.charAt(i);
  9. if(ch == 'X') x++;
  10. else if(ch == 'O') o++;
  11. }
  12. }
  13. if(o==1 && x==0)return false;
  14. if(x-1>o || o>x)return false;
  15. // 斜线
  16. if(board[0].charAt(0) == board[1].charAt(1) && board[1].charAt(1) == board[2].charAt(2)){
  17. if(board[0].charAt(0) == 'X')playerx = true;
  18. else if(board[0].charAt(0) == 'O')playero = true;
  19. }
  20. if(board[0].charAt(2) == board[1].charAt(1) && board[1].charAt(1) == board[2].charAt(0)){
  21. if(board[0].charAt(2) == 'X')playerx = true;
  22. else if(board[0].charAt(2) == 'O')playero = true;
  23. }
  24. // 横着
  25. for(String s: board){
  26. boolean flag = true;
  27. char c1 = s.charAt(0);
  28. for(int i=1;i<3;i++){
  29. char c2 = s.charAt(i);
  30. if(c1!=c2){
  31. flag=false;
  32. break;
  33. }
  34. }
  35. if(c1 == 'X'&& flag)playerx = true;
  36. else if(c1 == 'O'&& flag)playero = true;
  37. }
  38. // 竖着
  39. for(int i =0;i<3;i++){
  40. boolean flag = true;
  41. char c1 = board[0].charAt(i);
  42. for(int j = 1; j < 3;j++){
  43. String s = board[j];
  44. if(s.charAt(i) != c1){
  45. flag = false;
  46. break;
  47. }
  48. }
  49. if( c1 == 'X'&& flag)playerx =true;
  50. else if(c1 == 'O'&&flag)playero = true;
  51. }
  52. // 判断 玩家是否这很的胜利
  53. if(playerx)
  54. if(x<=o)return false;// playerx 先下,如果胜出,棋子数量比 player0 多
  55. if(playero)
  56. if(x!=o)return false;// player0 后下,如果胜出,棋子数量跟 playerx 一样多
  57. return (playero && playerx)?false:true;
  58. }
  59. }

正常风格代码的 讲解

相关文章

最新文章

更多