日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 289. 生命游戏(位运算)

發布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 289. 生命游戏(位运算) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題
      • 2.1 復制數組解法
      • 2.2 原地解法
      • 2.3 位運算

1. 題目

鏈接:289. 生命游戲

2. 解題

2.1 復制數組解法

很簡單,按照題意模擬即可

class Solution { public:void gameOfLife(vector<vector<int>>& board) {if(board.empty())return;vector<vector<int>> cp(board);//復制數組法int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0}, {1, 1}, {0, 1}, {-1, 1}};int m = board.size(), n = board[0].size(), i, j, k, x, y, live;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){live = 0;for(k = 0; k < 8; ++k){x = i+nearby[k][0];y = j+nearby[k][1];if(x>=0 && x<m && y>=0 && y<n && cp[x][y])live++;}if(cp[i][j]){if(live < 2 || live > 3)board[i][j] = 0;}else{if(live == 3)board[i][j] = 1;}}}} };

2.2 原地解法

  • 原來是1,標記成0,用2表示(等于1或者2,原狀態都是1)
  • 原來是0,標記成1,用3表示(等于0或者3,原狀態都是0)
  • 處理完后,改寫數組
  • 等于2的,賦值為0
  • 等于3的,賦值為1
class Solution { public:void gameOfLife(vector<vector<int>>& board) {if(board.empty())return;int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0}, {1, 1}, {0, 1}, {-1, 1}};int m = board.size(), n = board[0].size(), i, j, k, x, y, live;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){live = 0;for(k = 0; k < 8; ++k){x = i+nearby[k][0];y = j+nearby[k][1];if(x>=0 && x<m && y>=0 && y<n && (board[x][y]==1 || board[x][y]==2))live++;}if(board[i][j]){if(live < 2 || live > 3)board[i][j] = 2;}else{if(live == 3)board[i][j] = 3;}}}for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){if(board[i][j] == 2)board[i][j] = 0;else if(board[i][j] == 3)board[i][j] = 1;}}} };

2.3 位運算

  • 利用數值的低位作為原數據
  • 高位保存周圍存活的數量
class Solution { public:void gameOfLife(vector<vector<int>>& board) {if (board.empty())return;int m = board.size(), n = board[0].size(), i, j, k, x, y, live;int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0}, {1, 1}, {0, 1}, {-1, 1}}; for (i = 0; i < m; ++i) {for (j = 0; j < n; ++j) {for (k = 0; k < 8; ++k) {x = i + nearby[k][0];y = j + nearby[k][1];if (x >= 0 && x < m && y >= 0 && y < n)board[i][j] += (board[x][y] & 1) << 1;}}}for (i = 0; i < m; ++i) {for (j = 0; j < n; ++j) {live = board[i][j] >> 1;if (live < 2 || live > 3) board[i][j] = 0;else if (live == 3)board[i][j] = 1;elseboard[i][j] &= 1;}}} };

總結

以上是生活随笔為你收集整理的LeetCode 289. 生命游戏(位运算)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。