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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

巧妙异或思路解子集问题,面试官叫绝

發(fā)布時(shí)間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巧妙异或思路解子集问题,面试官叫绝 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ?題目描述:

? ? ? ?給定一組不含重復(fù)元素的整數(shù)數(shù)組 nums,返回該數(shù)組所有可能的子集(冪集)。
? ? ? ?說(shuō)明:解集不能包含重復(fù)的子集。
? ? ? ?示例:
? ? ? ?輸入: nums = [1,2,3]
? ? ? ?輸出:
? ? ? ?[
? ? ? ? ? [3],
? ? ? ? ? [1],
? ? ? ? ? [2],
? ? ? ? ? [1,2,3],
? ? ? ? ? [1,3],
? ? ? ? ? [2,3],
? ? ? ? ? [1,2],
? ? ? ? ? []
? ? ?]?

先看一張力扣上的圖:

可以通過(guò)對(duì)應(yīng)二進(jìn)制位是否為1,判斷是否需要該數(shù),由表格可推得總的情況總數(shù)是:0~z^n-1

//子集枚舉 //按位&:僅當(dāng)兩個(gè)都為1時(shí)才位1 func subsets(nums []int) (ans [][]int) {n := len(nums)//運(yùn)算符優(yōu)先級(jí)<<比<大//1<<n 表示結(jié)果的個(gè)數(shù)for mask := 0; mask < 1<<n; mask++ {set := []int{}for i, v := range nums {//運(yùn)算符優(yōu)先級(jí)>>比&(按位&)大//mask>>i &1 判斷第i位是不是1if mask>>i &1 > 0 {set = append(set, v)}}ans = append(ans, append([]int(nil), set...))}return }

代碼的主要思想在這段:mask>>i &1 > 0? ? 意思是判斷第i位是不是1,右移i個(gè)和1按位&。看上圖可知道,判斷該位是否為1,可以知道是否需要該數(shù),如果大于1,則將其放到數(shù)組里。

時(shí)間復(fù)雜度:O(n*2^n)

空間復(fù)雜度:O(n)

?

看下遞歸的解決方案:

func subsets(nums []int) (ans [][]int) {set := []int{}var dfs func(int)dfs = func(cur int) {if cur == len(nums) {ans = append(ans, append([]int(nil), set...))return}set = append(set, nums[cur])dfs(cur + 1)set = set[:len(set)-1]dfs(cur + 1)}dfs(0)return }

每個(gè)數(shù)可以選擇取還是不取

時(shí)間空間復(fù)雜度同上

?

參考地址:https://leetcode-cn.com/problems/subsets/solution/zi-ji-by-leetcode-solution/

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的巧妙异或思路解子集问题,面试官叫绝的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。