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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划)

發布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給定一個布爾表達式和一個期望的布爾結果 result,布爾表達式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符號組成。
實現一個函數,算出有幾種可使該表達式得出 result 值的括號方法。

示例 1: 輸入: s = "1^0|0|1", result = 0 輸出: 2 解釋: 兩種可能的括號方法是 1^(0|(0|1)) 1^((0|0)|1)示例 2: 輸入: s = "0&0&0&1^1|0", result = 1 輸出: 10提示: 運算符的數量不超過 19

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/boolean-evaluation-lcci
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 區間DP解題

  • dp?[i][j] 表示 區間[i,j]內運算值為 ?(0 or 1) 的方案數
  • 初始化,每個數字處dp?[i][i]=1, if s[i]==?
  • 然后按長度len遞增,求解dp[i][i+len]
  • dp[i][i+len]的求解可以根據其內部左右兩側的方案乘積得出
  • 所以分成兩部分dp[i,j],dp[j+2][i+len],遍歷所有的j,j+1處為運算符
  • 然后根據運算符的三種可能,討論0,1的結果,累加即可
class Solution { public:int countEval(string s, int result) {if(s=="")return 0;int i, j, n = s.size(), len;vector<vector<int>> dp0(n,vector<int>(n,0));vector<vector<int>> dp1(n,vector<int>(n,0));//dp?[i][j] 表示 區間[i,j]內運算值為 ? 的方案數for(i = 0; i < n; i+=2){if(s[i]=='1')dp1[i][i] = 1;elsedp0[i][i] = 1;}for(len = 2; len <= n-1; len += 2){ //按長度遞增for(i = 0; i < n-len; i += 2){ //左端點ifor(j = i; j <= i+len-2; j+=2){ //中間端點jif(s[j+1]=='&'){dp1[i][i+len] += dp1[i][j]*dp1[j+2][i+len];dp0[i][i+len] += dp0[i][j]*dp0[j+2][i+len]+dp1[i][j]*dp0[j+2][i+len]+dp0[i][j]*dp1[j+2][i+len];}else if(s[j+1]=='|'){dp1[i][i+len] += dp1[i][j]*dp1[j+2][i+len]+dp1[i][j]*dp0[j+2][i+len]+dp0[i][j]*dp1[j+2][i+len];dp0[i][i+len] += dp0[i][j]*dp0[j+2][i+len];}else//^{dp1[i][i+len] += dp1[i][j]*dp0[j+2][i+len]+dp0[i][j]*dp1[j+2][i+len];dp0[i][i+len] += dp0[i][j]*dp0[j+2][i+len]+dp1[i][j]*dp1[j+2][i+len];}}}}if(result)return dp1[0][n-1];return dp0[0][n-1];} };

8 ms 7 MB

總結

以上是生活随笔為你收集整理的程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。

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