精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇讓你學會組合問題!

開發 前端
直接的解法當然是使用for循環,例如示例中k為2,很容易想到 用兩個for循環,這樣就可以輸出 和示例中一樣的結果。

組合

力扣題目鏈接:https://leetcode-cn.com/problems/combinations/

給定兩個整數 n 和 k,返回 1 ... n 中所有可能的 k 個數的組合。

示例: 輸入: n = 4, k = 2 輸出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]

本題這是回溯法的經典題目。

直接的解法當然是使用for循環,例如示例中k為2,很容易想到 用兩個for循環,這樣就可以輸出 和示例中一樣的結果。

代碼如下:

  1. int n = 4; 
  2. for (int i = 1; i <= n; i++) { 
  3.     for (int j = i + 1; j <= n; j++) { 
  4.         cout << i << " " << j << endl; 
  5.     } 

輸入:n = 100, k = 3 那么就三層for循環,代碼如下:

  1. int n = 100; 
  2. for (int i = 1; i <= n; i++) { 
  3.     for (int j = i + 1; j <= n; j++) { 
  4.         for (int u = j + 1; u <= n; n++) { 
  5.             cout << i << " " << j << " " << u << endl; 
  6.         } 
  7.     } 

如果n為100,k為50呢,那就50層for循環,是不是開始窒息。

此時就會發現雖然想暴力搜索,但是用for循環嵌套連暴力都寫不出來!

咋整?

回溯搜索法來了,雖然回溯法也是暴力,但至少能寫出來,不像for循環嵌套k層讓人絕望。

那么回溯法怎么暴力搜呢?

上面我們說了要解決 n為100,k為50的情況,暴力寫法需要嵌套50層for循環,那么回溯法就用遞歸來解決嵌套層數的問題。

遞歸來做層疊嵌套(可以理解是開k層for循環),每一次的遞歸中嵌套一個for循環,那么遞歸就可以用于解決多層嵌套循環的問題了。

此時遞歸的層數大家應該知道了,例如:n為100,k為50的情況下,就是遞歸50層。

一些同學本來對遞歸就懵,回溯法中遞歸還要嵌套for循環,可能就直接暈倒了!

如果腦洞模擬回溯搜索的過程,絕對可以讓人窒息,所以需要抽象圖形結構來進一步理解。

我們在關于回溯算法,你該了解這些!中說道回溯法解決的問題都可以抽象為樹形結構(N叉樹),用樹形結構來理解回溯就容易多了。

那么我把組合問題抽象為如下樹形結構:

77.組合

可以看出這個棵樹,一開始集合是 1,2,3,4, 從左向右取數,取過的數,不在重復取。

第一次取1,集合變為2,3,4 ,因為k為2,我們只需要再取一個數就可以了,分別取2,3,4,得到集合[1,2] [1,3] [1,4],以此類推。

每次從集合中選取元素,可選擇的范圍隨著選擇的進行而收縮,調整可選擇的范圍。

圖中可以發現n相當于樹的寬度,k相當于樹的深度。

那么如何在這個樹上遍歷,然后收集到我們要的結果集呢?

圖中每次搜索到了葉子節點,我們就找到了一個結果。

相當于只需要把達到葉子節點的結果收集起來,就可以求得 n個數中k個數的組合集合。

在關于回溯算法,你該了解這些!中我們提到了回溯法三部曲,那么我們按照回溯法三部曲開始正式講解代碼了。

回溯法三部曲

遞歸函數的返回值以及參數

在這里要定義兩個全局變量,一個用來存放符合條件單一結果,一個用來存放符合條件結果的集合。

代碼如下:

  1. vector<vector<int>> result; // 存放符合條件結果的集合 
  2. vector<int> path; // 用來存放符合條件結果 

其實不定義這兩個全局遍歷也是可以的,把這兩個變量放進遞歸函數的參數里,但函數里參數太多影響可讀性,所以我定義全局變量了。

函數里一定有兩個參數,既然是集合n里面取k的數,那么n和k是兩個int型的參數。

然后還需要一個參數,為int型變量startIndex,這個參數用來記錄本層遞歸的中,集合從哪里開始遍歷(集合就是[1,...,n] )。

為什么要有這個startIndex呢?

每次從集合中選取元素,可選擇的范圍隨著選擇的進行而收縮,調整可選擇的范圍,就是要靠startIndex。

從下圖中紅線部分可以看出,在集合[1,2,3,4]取1之后,下一層遞歸,就要在[2,3,4]中取數了,那么下一層遞歸如何知道從[2,3,4]中取數呢,靠的就是startIndex。

組合2

所以需要startIndex來記錄下一層遞歸,搜索的起始位置。

那么整體代碼如下:

  1. vector<vector<int>> result; // 存放符合條件結果的集合 
  2. vector<int> path; // 用來存放符合條件單一結果 
  3. void backtracking(int n, int k, int startIndex) 

回溯函數終止條件

什么時候到達所謂的葉子節點了呢?

path這個數組的大小如果達到k,說明我們找到了一個子集大小為k的組合了,在圖中path存的就是根節點到葉子節點的路徑。

如圖紅色部分:

組合3

此時用result二維數組,把path保存起來,并終止本層遞歸。

所以終止條件代碼如下:

  1. if (path.size() == k) { 
  2.     result.push_back(path); 
  3.     return
  • 單層搜索的過程

回溯法的搜索過程就是一個樹型結構的遍歷過程,在如下圖中,可以看出for循環用來橫向遍歷,遞歸的過程是縱向遍歷。

組合1

如此我們才遍歷完圖中的這棵樹。

for循環每次從startIndex開始遍歷,然后用path保存取到的節點i。

代碼如下:

  1. for (int i = startIndex; i <= n; i++) { // 控制樹的橫向遍歷 
  2.     path.push_back(i); // 處理節點 
  3.     backtracking(n, k, i + 1); // 遞歸:控制樹的縱向遍歷,注意下一層搜索要從i+1開始 
  4.     path.pop_back(); // 回溯,撤銷處理的節點 

可以看出backtracking(遞歸函數)通過不斷調用自己一直往深處遍歷,總會遇到葉子節點,遇到了葉子節點就要返回。

backtracking的下面部分就是回溯的操作了,撤銷本次處理的結果。

關鍵地方都講完了,組合問題C++完整代碼如下:

  1. class Solution { 
  2. private: 
  3.     vector<vector<int>> result; // 存放符合條件結果的集合 
  4.     vector<int> path; // 用來存放符合條件結果 
  5.     void backtracking(int n, int k, int startIndex) { 
  6.         if (path.size() == k) { 
  7.             result.push_back(path); 
  8.             return
  9.         } 
  10.         for (int i = startIndex; i <= n; i++) { 
  11.             path.push_back(i); // 處理節點 
  12.             backtracking(n, k, i + 1); // 遞歸 
  13.             path.pop_back(); // 回溯,撤銷處理的節點 
  14.         } 
  15.     } 
  16. public
  17.     vector<vector<int>> combine(int n, int k) { 
  18.         result.clear(); // 可以不寫 
  19.         path.clear();   // 可以不寫 
  20.         backtracking(n, k, 1); 
  21.         return result; 
  22.     } 
  23. }; 

還記得我們在關于回溯算法,你該了解這些!中給出的回溯法模板么?

如下:

  1. void backtracking(參數) { 
  2.     if (終止條件) { 
  3.         存放結果; 
  4.         return
  5.     } 
  6.  
  7.     for (選擇:本層集合中元素(樹中節點孩子的數量就是集合的大?。? { 
  8.         處理節點; 
  9.         backtracking(路徑,選擇列表); // 遞歸 
  10.         回溯,撤銷處理結果 
  11.     } 

對比一下本題的代碼,是不是發現有點像! 所以有了這個模板,就有解題的大體方向,不至于毫無頭緒。

總結

組合問題是回溯法解決的經典問題,我們開始的時候給大家列舉一個很形象的例子,就是n為100,k為50的話,直接想法就需要50層for循環。

從而引出了回溯法就是解決這種k層for循環嵌套的問題。

然后進一步把回溯法的搜索過程抽象為樹形結構,可以直觀的看出搜索的過程。

接著用回溯法三部曲,逐步分析了函數參數、終止條件和單層搜索的過程。

剪枝優化

我們說過,回溯法雖然是暴力搜索,但也有時候可以有點剪枝優化一下的。

在遍歷的過程中有如下代碼:

  1. for (int i = startIndex; i <= n; i++) { 
  2.     path.push_back(i); 
  3.     backtracking(n, k, i + 1); 
  4.     path.pop_back(); 

這個遍歷的范圍是可以剪枝優化的,怎么優化呢?

來舉一個例子,n = 4,k = 4的話,那么第一層for循環的時候,從元素2開始的遍歷都沒有意義了。在第二層for循環,從元素3開始的遍歷都沒有意義了。

這么說有點抽象,如圖所示:

組合4

圖中每一個節點(圖中為矩形),就代表本層的一個for循環,那么每一層的for循環從第二個數開始遍歷的話,都沒有意義,都是無效遍歷。

所以,可以剪枝的地方就在遞歸中每一層的for循環所選擇的起始位置。

如果for循環選擇的起始位置之后的元素個數 已經不足 我們需要的元素個數了,那么就沒有必要搜索了。

注意代碼中i,就是for循環里選擇的起始位置。

  1. for (int i = startIndex; i <= n; i++) { 

接下來看一下優化過程如下:

已經選擇的元素個數:path.size();

還需要的元素個數為: k - path.size();

在集合n中至多要從該起始位置 : n - (k - path.size()) + 1,開始遍歷

為什么有個+1呢,因為包括起始位置,我們要是一個左閉的集合。

舉個例子,n = 4,k = 3, 目前已經選取的元素為0(path.size為0),n - (k - 0) + 1 即 4 - ( 3 - 0) + 1 = 2。

從2開始搜索都是合理的,可以是組合[2, 3, 4]。

這里大家想不懂的話,建議也舉一個例子,就知道是不是要+1了。

所以優化之后的for循環是:

  1. for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) // i為本次搜索的起始位置 

優化后整體代碼如下:

  1. class Solution { 
  2. private: 
  3.     vector<vector<int>> result; 
  4.     vector<int> path; 
  5.     void backtracking(int n, int k, int startIndex) { 
  6.         if (path.size() == k) { 
  7.             result.push_back(path); 
  8.             return
  9.         } 
  10.         for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) { // 優化的地方 
  11.             path.push_back(i); // 處理節點 
  12.             backtracking(n, k, i + 1); 
  13.             path.pop_back(); // 回溯,撤銷處理的節點 
  14.         } 
  15.     } 
  16. public
  17.  
  18.     vector<vector<int>> combine(int n, int k) { 
  19.         backtracking(n, k, 1); 
  20.         return result; 
  21.     } 
  22. }; 

剪枝總結

本篇我們準對求組合問題的回溯法代碼做了剪枝優化,這個優化如果不畫圖的話,其實不好理解,也不好講清楚。

所以我依然是把整個回溯過程抽象為一顆樹形結構,然后可以直觀的看出,剪枝究竟是剪的哪里。

其他語言版本

Java

  1. class Solution { 
  2.     List<List<Integer>> result = new ArrayList<>(); 
  3.     LinkedList<Integer> path = new LinkedList<>(); 
  4.     public List<List<Integer>> combine(int n, int k) { 
  5.         combineHelper(n, k, 1); 
  6.         return result; 
  7.     } 
  8.  
  9.     /** 
  10.      * 每次從集合中選取元素,可選擇的范圍隨著選擇的進行而收縮,調整可選擇的范圍,就是要靠startIndex 
  11.      * @param startIndex 用來記錄本層遞歸的中,集合從哪里開始遍歷(集合就是[1,...,n] )。 
  12.      */ 
  13.     private void combineHelper(int n, int k, int startIndex){ 
  14.         //終止條件 
  15.         if (path.size() == k){ 
  16.             result.add(new ArrayList<>(path)); 
  17.             return
  18.         } 
  19.         for (int i = startIndex; i <= n - (k - path.size()) + 1; i++){ 
  20.             path.add(i); 
  21.             combineHelper(n, k, i + 1); 
  22.             path.removeLast(); 
  23.         } 
  24.     } 

Python

  1. class Solution: 
  2.     def combine(self, n: int, k: int) -> List[List[int]]: 
  3.         res=[]  #存放符合條件結果的集合 
  4.         path=[]  #用來存放符合條件結果 
  5.         def backtrack(n,k,startIndex): 
  6.             if len(path) == k: 
  7.                 res.append(path[:]) 
  8.                 return 
  9.             for i in range(startIndex,n+1): 
  10.                 path.append(i)  #處理節點 
  11.                 backtrack(n,k,i+1)  #遞歸 
  12.                 path.pop()  #回溯,撤銷處理的節點 
  13.         backtrack(n,k,1) 
  14.         return res 

Go

  1. var res [][]int 
  2. func combine(n int, k int) [][]int { 
  3.    res=[][]int{} 
  4.    if n <= 0 || k <= 0 || k > n { 
  5.   return res 
  6.  } 
  7.     backtrack(n, k, 1, []int{}) 
  8.  return res 
  9. func backtrack(n,k,start int,track []int){ 
  10.     if len(track)==k{ 
  11.         temp:=make([]int,k) 
  12.         copy(temp,track) 
  13.         res=append(res,temp
  14.     } 
  15.     if len(track)+n-start+1 < k { 
  16.    return 
  17.   } 
  18.     for i:=start;i<=n;i++{ 
  19.         track=append(track,i) 
  20.         backtrack(n,k,i+1,track) 
  21.         track=track[:len(track)-1] 
  22.     } 

 

責任編輯:武曉燕 來源: 代碼隨想錄
相關推薦

2021-08-26 13:22:46

雪花算法隨機數

2022-08-29 08:00:11

哈希表數組存儲桶

2022-02-11 08:45:28

通信協議CAN

2022-03-04 21:06:46

spring事務失效

2022-03-11 10:21:30

IO系統日志

2021-11-30 19:58:51

Java問題排查

2022-01-02 08:43:46

Python

2022-02-07 11:01:23

ZooKeeper

2024-04-12 09:01:08

2022-06-04 07:46:41

HeapJVM

2021-07-06 08:59:18

抽象工廠模式

2023-11-28 08:29:31

Rust內存布局

2023-01-03 08:31:54

Spring讀取器配置

2021-07-02 09:45:29

MySQL InnoDB數據

2022-08-23 08:00:59

磁盤性能網絡

2021-05-11 08:54:59

建造者模式設計

2022-08-26 09:29:01

Kubernetes策略Master

2021-07-05 22:11:38

MySQL體系架構

2022-04-12 08:30:52

回調函數代碼調試

2021-07-16 22:43:10

Go并發Golang
點贊
收藏

51CTO技術棧公眾號

日本资源在线| 在线观看免费观看在线| 秋霞影视一区二区三区| 色噜噜狠狠成人中文综合| 日韩精品无码一区二区三区| 一级片免费网站| 欧美精品网站| 亚洲精品日韩丝袜精品| 五月天激情视频在线观看| 老司机精品视频在线观看6| 国产a视频精品免费观看| …久久精品99久久香蕉国产| 香蕉成人在线视频| h视频久久久| 在线观看视频一区二区欧美日韩| 中文字幕一区二区三区在线乱码| 日韩一卡二卡在线| 青娱乐精品在线视频| 国内精品久久久久久久久| 一区二区黄色片| 亚洲国产欧美在线观看| 日韩欧美精品网站| 中文字幕精品在线播放| 国外av在线| 国产成人免费在线观看| 国产精品中文字幕在线观看| 日本熟女一区二区| 亚洲国产精品久久久天堂 | 国产三级国产精品国产专区50| 超碰在线caoporen| 日本一区二区三区高清不卡| 国产在线精品日韩| 99久久亚洲精品日本无码| 久久资源在线| 高清一区二区三区四区五区| 91香蕉视频网| 波多野结衣的一区二区三区| 亚洲精品国产suv| 亚洲熟妇一区二区| 天堂综合在线播放| 欧洲精品视频在线观看| 日韩a在线播放| 国产三线在线| 亚洲精品国产a久久久久久| 亚洲国产欧美不卡在线观看| 四虎精品在永久在线观看| 国产91精品入口| 91亚洲一区精品| 中文字字幕在线中文乱码| 老鸭窝毛片一区二区三区| 午夜精品蜜臀一区二区三区免费| 久久久久免费看| 亚洲欧美综合久久久| 日韩在线中文字| 99在线视频免费| 精品国产一区探花在线观看| 亚洲日韩中文字幕| 欧美一区二区三区成人精品| 日韩成人动漫在线观看| 亚洲国语精品自产拍在线观看| 大桥未久恸哭の女教师| 综合激情网...| 亚洲精品一区二区三区在线观看| 美女被艹视频网站| 91成人噜噜噜在线播放| 亚洲国产精品大全| 50一60岁老妇女毛片| 欧美精品中文字幕亚洲专区| 亚洲第一视频在线观看| 亚洲av无码一区二区三区观看| 欧美日日夜夜| 亚洲区在线播放| 日韩视频在线观看免费视频| 日韩一区二区三区免费播放| 久久精品电影网| 日本黄色片免费观看| 欧美日韩p片| 性欧美在线看片a免费观看| 日本最新中文字幕| 久久狠狠一本精品综合网| 国产精品嫩草影院一区二区| 91成品人影院| 丰满放荡岳乱妇91ww| 精品综合久久久| 超碰免费在线| 亚洲激情六月丁香| 老太脱裤子让老头玩xxxxx| 美女一区网站| 7777精品伊人久久久大香线蕉| 先锋资源在线视频| 神马午夜久久| 久久国产一区二区三区| 中文字幕第28页| 老司机久久99久久精品播放免费| 国产精品吴梦梦| 精品毛片在线观看| 久久亚洲一区二区三区四区| 亚洲欧美99| 18video性欧美19sex高清| 欧洲精品一区二区三区在线观看| 永久免费黄色片| 私拍精品福利视频在线一区| 色婷婷av一区二区三区久久| 久久久久久久久久久久国产| 日韩电影免费在线看| 97久久精品午夜一区二区| 色视频免费在线观看| 中文字幕在线观看一区| 91视频最新入口| crdy在线观看欧美| 亚洲欧美三级在线| 欧美精品一区二区蜜桃| 免费看日韩精品| 国产福利久久| 免费网站黄在线观看| 亚洲免费在线观看| 久久久久久三级| 国产精品白丝一区二区三区| 国产视频亚洲| 欧美午夜片在线免费观看| 日本黄色福利视频| 秋霞一区二区| 中文字幕最新精品| 91精品国产综合久久久蜜臀九色| 激情国产一区二区| 欧美日韩系列| 国产在线美女| 日韩欧美一级二级三级久久久| www.av天天| 国产亚洲网站| 国产成人成网站在线播放青青 | 亚洲男人天天操| 国产一区二区精彩视频| 亚洲精品影视| 91手机视频在线观看| 婷婷成人激情| 91福利国产精品| 中文字幕狠狠干| 在线看片欧美| 成人黄色生活片| 香蕉视频在线播放| 欧美色男人天堂| 成熟妇人a片免费看网站| 午夜天堂精品久久久久| 96国产粉嫩美女| www.久久ai| 91麻豆精品国产自产在线 | 亚洲一区二区三区自拍| 1314成人网| 一区二区三区在线电影| 成人久久久久久| 成人日韩欧美| 91精品国产综合久久久久久久| 肉色超薄丝袜脚交69xx图片| 久久国产精品99精品国产 | 尤物网站在线观看| 国产精品地址| 国产伦精品一区二区三区视频免费 | 日韩av在线免费看| 九九热在线免费观看| 91久色porny| 成人一级片网站| 美女精品一区最新中文字幕一区二区三区| 欧美亚洲国产日韩2020| 天堂av2024| 色诱视频网站一区| 精品日韩在线视频| 久久国产三级精品| 久久国产精品免费观看| 亚洲三区欧美一区国产二区| 色综合久久88色综合天天看泰| 成人精品在线播放| 欧美日韩视频在线| 人妻av无码一区二区三区| 奇米精品一区二区三区在线观看一 | 亚洲特级片在线| 亚洲精品乱码久久久久久9色| 欧美三级网页| 欧美成人一区二区在线| 欧美日韩国产网站| 久久亚洲国产精品| 天天色天天操天天射| 欧美视频在线免费看| 五月激情四射婷婷| 国产盗摄女厕一区二区三区 | 久久精品日韩无码| 国产麻豆视频一区| 成年人网站免费视频| 国产亚洲第一伦理第一区| 成人欧美一区二区三区黑人| 国产精品探花在线| 在线国产精品播放| 高清毛片aaaaaaaaa片| 日本精品一区二区三区四区的功能| 国产欧美一区二区三区在线观看视频| 国产一区二区福利| 国产成人a亚洲精v品无码| 国产精品久久观看| 精品国产一二| 亚洲免费资源| 欧美一级电影免费在线观看| 黄色一级大片在线免费看产| 亚洲а∨天堂久久精品9966| 最近中文字幕在线观看| 亚洲国产aⅴ成人精品无吗| 91麻豆制片厂| 99re6这里只有精品视频在线观看| 97超碰成人在线| 99精品视频免费观看| 国产精品久久成人免费观看| 亚洲三级网址| 国产精品久久九九| 久久久久伊人| 日本午夜在线亚洲.国产| 欧洲成人综合网| 日日骚久久av| 国产一区电影| 日韩不卡在线观看| 国产成人精品a视频| 欧美午夜精品一区二区蜜桃| 成人毛片18女人毛片| 亚洲精品成人精品456| jizz日本在线播放| 久久女同性恋中文字幕| 日批在线观看视频| 国产精品1区二区.| 色婷婷一区二区三区av免费看| 久久久久99| 男人天堂1024| 日韩午夜精品| 免费毛片网站在线观看| 午夜精品偷拍| 国产又粗又爽又黄的视频| 日韩久久电影| 亚洲国产午夜伦理片大全在线观看网站| 欧美a级网站| 国产高清精品一区二区三区| 日韩精品中文字幕吗一区二区| 国产精品视频yy9099| 亚洲精品国产嫩草在线观看| 欧美在线观看网站| 极品av在线| 国语对白做受69| av资源中文在线| 国内精品在线一区| 九色porny视频在线观看| 欧美—级高清免费播放| 免费在线国产视频| 欧美激情视频一区二区三区不卡 | 精品香蕉视频| 天堂精品一区二区三区| 欧美午夜精彩| 亚洲一区二区精品在线观看| 视频在线不卡免费观看| 亚洲一区二区三区午夜| 欧美丰满老妇| 日韩不卡视频一区二区| 午夜久久福利| 成人午夜视频在线观看免费| 在线看片一区| 国产一区二区视频免费在线观看| 亚洲欧美日本视频在线观看| 日韩av在线综合| 美女视频黄免费的久久| 天天操精品视频| 国产精品77777竹菊影视小说| 无码人妻久久一区二区三区蜜桃| 国产成人av一区| xxxx黄色片| 国产女人18毛片水真多成人如厕 | 国产精品69久久| 成人午夜亚洲| 91免费观看| 亚欧洲精品视频在线观看| 日韩电影天堂视频一区二区| 97精品视频在线看| 国产一二三区在线播放| 一区二区三区精品视频在线观看| 久久精品网站视频| 久久99蜜桃精品| 久草视频福利在线| 久久久国产精品麻豆| 99热在线观看精品| 亚洲国产美国国产综合一区二区| 中文字幕黄色片| 91精品国产综合久久精品图片| 亚洲精品成人电影| 亚洲午夜久久久影院| 亚洲丝袜精品| 国产成人精品久久| 日韩精品一区国产| 清纯唯美一区二区三区| 综合激情视频| 国产淫片av片久久久久久| 狠狠久久亚洲欧美| 人妻少妇精品视频一区二区三区| 中文字幕av一区二区三区免费看| 精品无码人妻一区二区三区| 欧美综合天天夜夜久久| 高清国产mv在线观看| 日韩在线视频免费观看| 亚洲第一av| 91久久国产综合久久蜜月精品 | 黄色高清视频网站| 久久久久一区| www.啪啪.com| 亚洲女同女同女同女同女同69| 久久亚洲精品国产| 欧美成人免费网站| 日本精品在线| 国产精品高潮呻吟久久av野狼 | 精品肉丝脚一区二区三区| 在线观看三级视频欧美| 人妻一区二区三区四区| 久久艳片www.17c.com| 欧美极品影院| 好吊色欧美一区二区三区视频| 天天操夜夜操国产精品| 精品视频无码一区二区三区| 成熟亚洲日本毛茸茸凸凹| 2014亚洲天堂| 在线观看日韩电影| 无码精品视频一区二区三区| 九色成人免费视频| 日韩综合av| 午夜精品一区二区三区四区| 欧美亚洲视频| 久久久国产精品无码| 亚洲尤物在线视频观看| 国产美女裸体无遮挡免费视频| 中日韩美女免费视频网址在线观看| 松下纱荣子在线观看| 国产麻豆日韩| 亚洲视频精品| 日本黄色大片在线观看| 亚洲色图20p| 国产欧美久久久| 久久视频国产精品免费视频在线| 成人交换视频| 亚洲一二区在线| 美女一区二区久久| 四季av中文字幕| 欧美日韩高清一区二区三区| 成人av一区| 国产精品入口尤物| 水蜜桃久久夜色精品一区| 三上悠亚在线一区| 亚洲欧洲精品成人久久奇米网| 中文无码av一区二区三区| 伊人久久精品视频| 国产精品xxx| 一区二区三区四区不卡| 紧缚奴在线一区二区三区| 欧美a级片免费看| 欧美放荡的少妇| 羞羞的视频在线观看| 爱情岛论坛亚洲入口| 国产精品v亚洲精品v日韩精品| 精品人妻二区中文字幕| 亚洲综合色视频| 少妇一级淫片免费看| 欧美一区深夜视频| 国产精品欧美在线观看| 亚洲不卡视频在线| 成人欧美一区二区三区白人| av官网在线观看| 久久久久国产精品一区| 天堂俺去俺来也www久久婷婷| 欧美视频免费播放| 中文字幕亚洲欧美在线不卡| 99国产精品欲| 97在线视频精品| 精品久久久久久久久久久下田| 中文字幕免费高清在线| 亚洲精品乱码久久久久久| 艳母动漫在线看| 国产精品专区第二| 欧美日韩国产高清| 亚洲天堂成人av| 欧美久久久影院| 国产h片在线观看| 日韩影片在线播放| 国产精品888| 国产第一页在线观看| 久久久精品欧美| 婷婷国产精品| 成人高清在线观看视频| 色综合咪咪久久| av毛片在线播放| 欧美日韩一区在线观看视频| 精品一区二区成人精品| 国产无码精品视频| 在线观看欧美视频| 噜噜噜天天躁狠狠躁夜夜精品| 深夜黄色小视频| 午夜精品福利一区二区三区蜜桃| 91精品专区| 精品久久一区二区三区蜜桃| 久久99蜜桃精品| 国产精品va无码一区二区三区|