日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

回溯(backtrack)

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回溯(backtrack) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回溯(backtrack)

    • 1 回溯法思路
    • 2 常見題目
      • 2.1 (lee-78) 子集
      • 2.2 (lee-90) 子集2
      • 2.3 (lee-46) 全排列
      • 2.4 (lee-47) 全排列2
      • 2.5 (lee-39) 組合總和
      • 2.6 (lee-40) 組合總和2
      • 2.7 (lee-93) 復原IP地址
      • 2.8 (lee-17) 電話號碼的字母組合
      • 2.9 (lee-131) 分割回文串
      • 2.10 (lee-79) 單詞搜索
      • 2.11 (lee-200) 島嶼數量
      • 2.12 (lee-JZ13)機器人的運動范圍
      • 2.13 (lee-JZ38) 字符串的排列
    • 3 練習鏈接

(JAVA版本)

1 回溯法思路

常用于遍歷列表所有子集,是 DFS 深度搜索一種,一般用于全排列,窮盡所有可能,遍歷的過程實際上是一個決策樹的遍歷過程。時間復雜度一般 O(N!),它不像動態規劃存在重疊子問題可以優化,回溯算法就是純暴力窮舉,復雜度一般都很高。
思路:核心就是從選擇列表里做一個選擇,然后一直遞歸往下搜索答案,如果遇到路徑不通,就返回來撤銷這次選擇。

偽代碼結構

int[] result = new int[size];void backtrack(選擇列表,路徑): {if 滿足結束條件: {result.add(路徑)return}for (選擇 : 選擇列表): {做選擇backtrack(選擇列表,路徑)撤銷選擇}}

說明
在后面的題目中,我們會頻繁的看到visited[]以及start變量,有些朋友可能會疑惑什么時候使用 visited 數組,什么時候使用 start 變量?總結如下:

  • 排列問題,講究順序(即 [2, 2, 3] 與 [2, 3, 2] 視為不同列表時),需要記錄哪些數字已經使用過,此時用visited 數組;
  • 組合問題,不講究順序(即 [2, 2, 3] 與 [2, 3, 2] 視為相同列表時),需要按照某種順序搜索,此時使用start 變量。

2 常見題目

2.1 (lee-78) 子集

給定一組不含重復元素的整數數組 nums,返回該數組所有可能的子集(冪集)。可以按 任意順序 返回解集。
思路:回溯法

輸入:nums = [1,2,3]
輸出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

(1)按任意順序返回

/*** 1.按任意順序返回*/public ArrayList<ArrayList<Integer>> subsets1(int[] S) { ArrayList<ArrayList<Integer>> res = new ArrayList<>();LinkedList<Integer> track = new LinkedList<>();back(res,S,0,track);return res; } private void back(ArrayList<ArrayList<Integer>> res,int[] S, int start, LinkedList<Integer> track) {res.add(new ArrayList<>(track));for(int i = start;i < S.length;i++) {track.add(S[i]); //更新狀態back(res,S,i+1,track); //回溯track.removeLast(); //回退狀態} }

(2)按一定順序返回

/*** 2.按一定順序返回*/public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> res = new ArrayList<>();for(int i = 0;i <= nums.length ;i++) { //i是某個子集內的元素個數backtrack(res,0,new ArrayList<Integer>(),nums,i); }return res; }private void backtrack(List<List<Integer>> res, int first, ArrayList<Integer> cur, int[] nums,int k) {if(cur.size()== k) {res.add(new ArrayList<>(cur));return ;}for(int i = first;i < nums.length;i++) {cur.add(nums[i]);backtrack(res,i+1, cur, nums,k);cur.remove(cur.size()-1); // 刪除最后添加的一個數}}public static void main(String[] args) {Subsets s = new Subsets();Scanner in = new Scanner(System.in);String[] str = in.nextLine().split(" ");int[] nums = new int[str.length];for(int i = 0;i <nums.length;i++) {nums[i] = Integer.parseInt(str[i]);}List<List<Integer>> res = s.subsets(nums);System.out.println(res);}

2.2 (lee-90) 子集2

給你一個整數數組 nums ,其中可能包含重復元素,請你返回該數組所有可能的子集(冪集)。解集 不能 包含重復的子集。返回的解集中,子集可以按 任意順序 排列。

輸入:nums = [1,2,2]
輸出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner;public class Subsets2 {/*** 思路:重復的解不添加進去,并用一個數組visited標記某個元素是否被訪問過*/public List<List<Integer>> subsetsWithDup(int[] nums) {List<List<Integer>> res = new ArrayList<>();Arrays.sort(nums); //先將數組排序List<Integer> temp = new ArrayList<>();for(int i= 0;i <= nums.length;i++) {backtrack(res,temp,new boolean[nums.length],nums,0,i);}return res;}/** * @param res 所有子集* @param temp * @param visited 標記元素* @param nums * @param start* @param size*/private void backtrack(List<List<Integer>> res, List<Integer> temp, boolean[] visited, int[] nums, int start, int size) {if(temp.size() == size) {res.add(new ArrayList<>(temp));return;}for(int i = start; i <nums.length;i++) {if(i != 0 && nums[i] == nums[i-1] && !visited[i-1]) { //若發現沒有選擇上一個數,且當前數字與上一個數相同且前一個數沒有被標記過,則可以跳過當前生成的子集。。continue;}temp.add(nums[i]);visited[i] = true;backtrack(res, temp, visited, nums, i+1, size); //根據與前面元素是否重復,來決定start的取值,也就是開始遍歷的位置visited[i] = false;temp.remove(temp.size()-1);} }public static void main(String[] args) {Subsets2 s = new Subsets2();Scanner in = new Scanner(System.in);String[] str = in.nextLine().split(" ");int[] nums = new int[str.length];for(int i = 0;i <nums.length;i++) {nums[i] = Integer.parseInt(str[i]);}List<List<Integer>> res = s.subsetsWithDup(nums);System.out.println(res);} }

2.3 (lee-46) 全排列

給定一個沒有重復數字的序列,返回其所有可能的全排列。 可以 按任意順序 返回答案。

輸入:nums = [1,2,3]
輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

/*** 思路:需要用一個visited數組記錄已經選擇過的元素,滿足條件的結果才進行返回* @param nums* @return*/public List<List<Integer>> permute(int[] nums) {List<List<Integer>> res = new ArrayList<>();List<Integer> permute = new ArrayList<>();boolean[] visited = new boolean[nums.length];backtrack(res,permute,visited,nums);return res;}/*** @param res 返回結果* @param permute * @param visited 記錄以及選擇過的元素* @param nums 數組*/private void backtrack(List<List<Integer>> res, List<Integer> permute, boolean[] visited, int[] nums) {if(permute.size() == nums.length) { //滿足結束條件res.add(new ArrayList<>(permute));return ;}for(int i = 0;i < visited.length;i++) {if(visited[i]) {continue;}visited[i] = true; //做選擇permute.add(nums[i]); backtrack(res, permute, visited, nums);visited[i] = false;//撤銷選擇 permute.remove(permute.size() - 1); }}

2.4 (lee-47) 全排列2

給定一個可包含重復數字的序列,返回所有不重復的全排列。
時間復雜度為 O(n×n!)
空間復雜度 O(n)

輸入:nums = [1,1,2]
輸出:[[1,1,2], [1,2,1], [2,1,1]]

public List<List<Integer>> permuteUnique(int[] nums) {List<List<Integer>> res = new ArrayList<>();List<Integer> permute = new ArrayList<>();Arrays.sort(nums);boolean[] visited = new boolean[nums.length];backtrack(res,permute,visited,nums);return res;}private void backtrack(List<List<Integer>> res, List<Integer> permute, boolean[] visited, int[] nums) {if(permute.size() == nums.length) {res.add(new ArrayList<>(permute));return;}for(int i = 0;i <nums.length;i++) {if(i != 0 && nums[i] == nums[i-1] && !visited[i-1]) { //若發現沒有選擇上一個數,且當前數字與上一個數相同且前一個數沒有被標記過,則可以跳過當前生成的子集。continue;}if(visited[i]) {continue;}visited[i] = true; //做選擇permute.add(nums[i]);backtrack(res, permute, visited, nums);visited[i] = false;//撤銷選擇permute.remove(permute.size() - 1);}}

2.5 (lee-39) 組合總和

給定一個無重復元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的數字可以無限制重復被選取。
所有數字(包括 target)都是正整數。
解集不能包含重復的組合。

輸入:candidates = [2,3,6,7], target = 7,
所求解集為:[ [7], [2,2,3] ]

(1)寫法一

/*** (-------------寫法一 -------------)* [2,3,6,7],7, res = [[7],[2,2,3]]* 思路:畫樹形圖,深度優先遍歷,回溯剪枝* 1.以 target 根結點 ,創建一個分支時做減;* 2.每一個箭頭表示:從父親結點的數值減去邊上的數值,得到孩子結點的數值。邊的值就是題目中給出的 candidate 數組的每個元素的值;* 3.減到 0 或者負數的時候停止,即:結點 0 和負數結點成為葉子結點;* 4.所有從根結點到結點 0 的路徑(只能從上往下,沒有回路)就是題目要找的一個結果列表。* * 以target=7為例,結果集應該為{{2,2,3},{7}},但是以上步驟會出現重復路徑,比如{2,3,2},{3,2,2},由于題目不要求順序輸出,因此需要去重,也就是剪枝。* 去重思路:在搜索的過程中去重,每一次搜索的時候設置下一輪搜索的起點start;* * @param candidates* @param target* @return*/public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> res = new ArrayList<>();List<Integer> combinPath = new ArrayList<>();backtrack(res,combinPath,target,candidates,0);return res;}/*** * @param res 結果集* @param combin 從根節點到葉子節點的路徑列表* @param target 每減去一個元素,目標值變小* @param candidates 候選數組* @param start 搜索起點*/private void backtrack(List<List<Integer>> res, List<Integer> combinPath, int target, int[] candidates, int start) {// target 為負數和 0 的時候不再產生新的葉子結點if(target < 0 ) {return;}if(target == 0) {res.add(new ArrayList<>(combinPath));return;}for(int i = start;i < candidates.length;i++) {//從 start 開始搜索combinPath.add(candidates[i]); System.out.println("遞歸之前 => " + combinPath + ",剩余 = " + (target - candidates[i]));backtrack(res, combinPath, target-candidates[i], candidates,i);// 注意:由于每一個元素可以重復使用,下一輪搜索的起點依然是 i,這里非常容易弄錯combinPath.remove(combinPath.size() - 1);System.out.println("遞歸之后 => " + combinPath);}}

(2)寫法二

/*** (-------------寫法二 -------------)* 剪枝提速:如果 target 減去一個數得到負數,那么減去一個更大的樹依然是負數,同樣搜索不到結果;* 基于這個想法,我們可以對輸入數組進行排序,排序是為了提高搜索速度,添加相關邏輯達到進一步剪枝的目的。* 可以打印遞歸前后的輸出查看**** @param candidates* @param target* @return*/public List<List<Integer>> combinationSum1(int[] candidates, int target) {List<List<Integer>> res = new ArrayList<>();List<Integer> combinPath = new ArrayList<>();Arrays.sort(candidates); // 排序是剪枝的前提backtrack1(res,combinPath,candidates,target,0);return res;}private void backtrack1(List<List<Integer>> res, List<Integer> combinPath, int[] candidates, int target, int start) {// 由于進入更深層的時候,小于 0 的部分被剪枝,因此遞歸終止條件值只判斷等于 0 的情況if(target == 0) {res.add(new ArrayList<>(combinPath));return;}for(int i = start ;i < candidates.length;i++) {if(target < candidates[i]) { // 重點理解這里剪枝,前提是候選數組已經有序break;}combinPath.add(candidates[i]);System.out.println("遞歸之前 => " + combinPath + ",剩余 = " + (target - candidates[i]));backtrack1(res, combinPath, candidates, target-candidates[i], i);combinPath.remove(combinPath.size() - 1);System.out.println("遞歸之后 => " + combinPath);}}

2.6 (lee-40) 組合總和2

給定一個數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的 每個數字在每個組合中只能使用一次 。
說明
所有數字(包括目標數)都是正整數。
解集不能包含重復的組合。

輸入: candidates = [2,5,2,1,2], target = 5,
輸出: [ [1,2,2], [5] ]

時間復雜度:O(n*2^n)
空間復雜度:O(n)

/*** 思路:畫樹形圖,深度遍歷,剪枝去重* 去重的思路:由于題目要求每個數字在每個組合中只能使用一次并且解集不能包含重復組合,* [2,5,2,1,2] T = 5, res = [[1,2,2],[5]]* @param candidates* @param target* @return*/public List<List<Integer>> combinationSum2(int[] candidates, int target) {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();Arrays.sort(candidates); //排序避免重復解backtrack(res,path,candidates,target,0);return res;}/*** * @param res* @param path* @param candidates* @param target* @param start*/private void backtrack(List<List<Integer>> res, List<Integer> path, int[] candidates, int target, int start) {if(target == 0) {res.add(new ArrayList<>(path));return;}for(int i = start;i < candidates.length;i++) { //for循環遍歷從start開始的數,選一個數進入下一層遞歸。 if(target < candidates[i]) { // 剪枝:如果當前candidates數組的和已經大于目標target,沒必要枚舉了,直接returnbreak;}if(i > start && candidates[i] == candidates[i-1]){ //避免子路徑重復,如出現兩個[1,2,2]:如果從start開始的數有連續出現的重復數字,跳過該數字continuecontinue;}path.add(candidates[i]);backtrack(res, path, candidates, target - candidates[i], i+1); //注意為避免一個組合里出現重復使用的情況所以在進入下一層遞歸時要用i+1,從i之后的數中選擇接下來的數,避免出現[1,1,1,1,1]類似這樣path.remove(path.size() - 1); }}

2.7 (lee-93) 復原IP地址

給定一個只包含數字的字符串,用以表示一個 IP 地址,返回所有可能從 s 獲得的 有效 IP 地址 。你可以按任何順序返回答案。有效 IP 地址 正好由四個整數(每個整數位于 0 到 255 之間組成,且不能含有前導 0),整數之間用 ‘.’ 分隔。
例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 無效 IP 地址。

輸入:s = “25525511135”
輸出:[“255.255.11.135”,“255.255.111.35”]
輸入:s = “010010”
輸出:[“0.10.0.10”,“0.100.1.0”]

/*** 思路:由于要找出所有可能復原出的 IP 地址,使用回溯的方法,對所有可能的字符串分隔方式進行搜索,并篩選出滿足要求的作為答案。* 回溯套路* @param s* @return*/public List<String> restoreIpAddresses(String s) {List<String> res = new ArrayList<>();List<String> path = new ArrayList<>();backtrack(res,path,s,0);return res;}private void backtrack(List<String> res, List<String> path, String s, int start) {//終止條件if(path.size() > 4) { //IP超過四段終止return;}if(path.size() >= 4 && start != s.length()) { //如果等于4段但不是原字符串也終止return;}if(path.size() == 4) { //如果等于4段并且組合起來是原字符串則添加到結果集里面res.add(String.join(".", path));return;}for(int i = start; i < s.length();i++) {//選擇條件:如果字符串在0-255之外則跳過;如果字符串存在01這種情況也跳過繼續String str = s.substring(start,i+1);if(str.length() > 1 && str.startsWith("0") || str.length() > 3) {continue;} int val = Integer.valueOf(str);if(val < 0 || val > 255) {continue;}path.add(str); //做選擇backtrack(res, path, s, i+1);path.remove(path.size() - 1); //撤銷選擇}}

2.8 (lee-17) 電話號碼的字母組合

給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。給出數字到字母的映射如下(與電話按鍵相同)。注意 1 不對應任何字母。

輸入:digits = “23”
輸出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
輸入:digits = “2”
輸出:[“a”,“b”,“c”]
輸入:digits = “”
輸出:[ ]

public List<String> letterCombinations(String digits) {List<String> res = new ArrayList<>(); if(digits.length() == 0) {return res;}Map<Character,String> map = new HashMap<>();map.put('2', "abc");map.put('3', "def");map.put('4', "ghi");map.put('5', "jkl");map.put('6', "mno");map.put('7', "pqrs");map.put('8', "tuv");map.put('9', "wxyz");backtrack(res,digits,map,new StringBuilder(),0);return res;}/*** * @param res 結果集* @param digits 輸入的String數字串* @param map 存儲字符和字符串的映射* @param cur 當前讀入的內容* @param start */private void backtrack(List<String> res, String digits,Map<Character, String> map, StringBuilder cur ,int start) {if(cur.length() == digits.length()) { //結束條件:當長度夠了就添加結果res.add(cur.toString());return;}char c = digits.charAt(start); //根據當前數字選擇字符String letters = map.get(c);//字符對應的字符串for(int i = 0;i <letters.length();i++) {cur.append(letters.charAt(i));backtrack(res, digits,map, cur ,start+1);cur.deleteCharAt(start);}}

2.9 (lee-131) 分割回文串

給你一個字符串 s,請你將 s 分割成一些子串,使每個子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正著讀和反著讀都一樣的字符串。

輸入:s = “aab”
輸出:[[“a”,“a”,“b”],[“aa”,“b”]]
輸入:s = “a”
輸出:[[“a”]]

public List<List<String>> partition(String s) {List<List<String>> res = new ArrayList<>();List<String> path = new ArrayList<>();backtrack(res,path,s,0);return res;}/*** 回溯* @param res* @param path* @param s* @param start*/private void backtrack(List<List<String>> res, List<String> path, String s, int start) {if(start == s.length()) { //注意是startres.add(new ArrayList<>(path));return;}for(int i = start;i < s.length();i++) {String str = s.substring(start,i+1);if(!isPalindrome(str)) {continue;}path.add(str);backtrack(res, path, s, i+1); //注意path.remove(path.size() - 1);}}/*** 判斷是否是回文串* @param s* @return*/private boolean isPalindrome(String s) {if(s == null || s.length() <= 1) {return true;}int left = 0;int right = s.length() - 1;while(left < right) {if(s.charAt(left) != s.charAt(right)) {return false;}left++;right--;}return true;}

2.10 (lee-79) 單詞搜索

(lee-JZ12)矩陣中的路徑
請設計一個函數,用來判斷在一個矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。
如果一條路徑經過了矩陣的某一格,那么該路徑不能再次進入該格子。例如,在下面的3×4的矩陣中包含一條字符串“abcced”的路徑(路徑中的字母用加粗標出)。

但矩陣中不包含字符串“abfb”的路徑,因為字符串的第一個字符b占據了矩陣中的第一行第二個格子之后,路徑不能再次進入這個格子。

輸入:board = [[“a”,“b”],[“c”,“d”]], word = “abcd”
輸出:false
輸入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”
輸出:true

/*** dfs + 回溯(重要)*/private int m,n;private int[][] direction = {{1,0},{-1,0},{0,1},{0,-1}};public boolean exist(char[][] board,String word) {m = board.length;n = board[0].length;boolean[][] visited = new boolean[m][n];for(int i = 0;i < m;i++) {for(int j = 0;j < n;j++) {if(dfs(0,i,j,visited,board,word)){return true;}}}return false;}private boolean dfs(int start, int r, int c, boolean[][] visited, char[][] board, String word) {//遞歸結束條件:返回true ---- 字符串以全部匹配if(start == word.length()) { return true;}//遞歸結束條件:返回false ---- 如果行或列索引越界 || 當前矩陣元素與目標字符不同 || 當前矩陣元素已訪問過 說明此路不通if(r < 0 || r >= m || c < 0 || c >= n || board[r][c] != word.charAt(start) || visited[r][c]) {return false;}visited[r][c] = true; for(int[] d : direction) {if(dfs(start + 1, r + d[0], c + d[1], visited, board, word)) {return true;}} visited[r][c] = false; return false;}

2.11 (lee-200) 島嶼數量

給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。此外,你可以假設該網格的四條邊均被水包圍。
思路:DFS 通過深度搜索遍歷可能性

輸入:grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]
輸出:1

public int numIslands(char[][] grid) {if(grid.length==0) {return 0;}int total = 0;int row = grid.length;int col = grid[0].length;for(int i = 0;i < row;i++) {for(int j = 0;j < col;j++) {if(grid[i][j]=='1') {dfs(grid,i,j);total++; }}}return total;}/*** 深度搜索DFS* @param grid 二維網格-島嶼* @param x * @param y* @return*/private void dfs(char[][] grid, int x, int y) {if(x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] != '1' ) {return;}grid[x][y] = '0';dfs(grid,x-1,y);dfs(grid,x+1,y);dfs(grid,x,y-1);dfs(grid,x,y+1);}

2.12 (lee-JZ13)機器人的運動范圍

地上有一個m行n列的方格,從坐標 [0,0] 到坐標 [m-1,n-1] 。一個機器人從坐標 [0, 0] 的格子開始移動,它每次可以向左、右、上、下移動一格(不能移動到方格外),也不能進入行坐標和列坐標的數位之和大于k的格子。例如,當k為18時,機器人能夠進入方格 [35, 37] ,因為3+5+3+7=18。但它不能進入方格 [35, 38],因為3+5+3+8=19。請問該機器人能夠到達多少個格子?

輸入:m = 2, n = 3, k = 1
輸出:3
輸入:m = 3, n = 1, k = 0
輸出:1

思路:DFS
首先,我們可以把行坐標和列坐標的數位之和大于k的格子看成是障礙物,標注為1,其他可達的地方標注為0。
其次,因為機器人可以向上下左右移動一格,我們可以將其縮減為向下和向右兩個方向移動,因為當我們從起點向這兩個方向移動時,則新加入的空方格都可以由上方或左方的格子移動一步得到,而且當k值越大,連通的空方格的區域越多。
因此狀態轉移方程可以寫成:visited[i][j] = visited[i-1][j] || visited[i][j-1] visited[i][j]表示可達或者不可達
最后,使用一個變量res來記錄可達的格子的數量
初始條件:visited[i][j] = 0 可達
再說,如何計算數位和?
我們每次將數 X%10 取余的操作得到X的個位數,然后再將X/10,相當于>>一位,刪除個位數,不斷重復直到 X = 0 時結束。
時間復雜度:O(mn) 其中 m 為方格的行數, n 為方格的列數。一共有 O(mn)個狀態需要計算,每個狀態遞推計算的時間復雜度為 O(1),所以總時間復雜度為 O(mn).
空間復雜度:O(mn) 需要 O(mn)大小的結構來記錄每個位置是否可達。

public class RobotMovingCount { // DFS int res = 0;public int movingCount(int m, int n, int k) {if(k == 0) {return 1;}boolean[][] visited = new boolean[m][n]; //初始化默認為false dfs(visited,0,0,k);return res;}private void dfs(boolean[][] visited, int x, int y, int k) {int m = visited.length;int n = visited[0].length;//越界情況和遇到障礙的情況if(x >= m || x < 0 || y >= n || y < 0 || get(x)+get(y) > k || visited[x][y]) {return ;}visited[x][y] = true; //未遍歷res++;dfs(visited, x+1, y, k); //往下走一格dfs(visited, x, y+1, k); //往右走一格}//位數和private int get(int x) {int res = 0;while(x != 0) {res += x % 10;x /= 10;}return res;}public static void main(String[] args) {Scanner in = new Scanner(System.in);int m = in.nextInt();int n = in.nextInt();int k = in.nextInt();RobotMovingCount rmc = new RobotMovingCount();int res = rmc.movingCount(m, n, k);System.out.print(res);} }

2.13 (lee-JZ38) 字符串的排列

(lee-JZ38)字符串的排列
返回String[]類型:輸入一個字符串,打印出該字符串中字符的所有排列。你可以以任意順序返回這個字符串數組,但里面不能有重復元素。
(NC-JZ27)字符串的排列:返回ArrayList類型。輸入一個字符串,長度不超過9(可能有字符重復),字符只包括大小寫字母。

輸入:s = “abc”
輸出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]

public class Permutation {/** 思路:回溯法* 與lee-46和47類似題目,都是求全排列* 要求不能重復,因此使用47中無重復的排列*/public ArrayList<String> permutation(String s) { ArrayList<String> res = new ArrayList<>();StringBuilder sb = new StringBuilder();Arrays.sort(s.toCharArray()); //按字典序時boolean[] visited = new boolean[s.length()];backtrack(res,sb,visited,s);return res;}private void backtrack(ArrayList<String> res, StringBuilder sb, boolean[] visited, String s) {if(sb.length() == s.length()) {res.add(sb.toString());return;}for(int i = 0;i < visited.length;i++) {if(i != 0 && s.charAt(i)==s.charAt(i-1) && !visited[i-1]) { //若發現沒有選擇上一個字符,且當前字符與上一個字符相同且前一個字符沒有被標記過,則可以跳過當前生成的子集。continue;}if(visited[i]) {continue;}visited[i] = true; //做選擇sb.append(s.charAt(i));backtrack(res, sb, visited, s);visited[i] = false;//撤銷選擇sb.deleteCharAt(sb.length() - 1);}}public static void main(String args[]) {Permutation p = new Permutation();Scanner in = new Scanner(System.in);String s = in.next();ArrayList<String> res = p.permutation(s);System.out.print(res);} }

3 練習鏈接

  • lee-78 子集
  • lee-90 子集2
  • lee-46 全排列
  • lee-47 全排列2
  • lee-39 組合總和
  • lee-40 組合總和2
  • lee-93 復原IP地址
  • lee-17 電話號碼的字母組合
  • lee-131 分割回文串
  • (lee-79) 單詞搜索
  • lee-200 島嶼數量
  • (lee-JZ13)機器人的運動范圍
  • (lee-JZ38)字符串的排列

總結

以上是生活随笔為你收集整理的回溯(backtrack)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久一二三四 | 永久免费在线 | 狠狠的干 | 激情中文在线 | 久久久资源网 | 黄色在线免费观看网址 | 欧美精品二区 | 一级黄色毛片 | 久久久伦理 | 日韩av片无码一区二区不卡电影 | 亚洲国产精品视频在线观看 | 天堂av网站| 久久久久久久久黄色 | 日本精品在线 | 亚洲免费在线播放视频 | 亚洲天堂va | 热热热热热色 | 久久精品播放 | 免费在线中文字幕 | 久久精品电影 | 激情综合电影网 | 在线亚洲小视频 | 欧美调教网站 | 97av精品 | 久久人人爽人人片 | 亚洲精品网站在线 | 亚洲人成免费网站 | 欧美一区二区在线看 | 日韩一区二区三区高清在线观看 | 99国产精品一区二区 | 夜夜高潮夜夜爽国产伦精品 | 狠狠的干狠狠的操 | 亚洲成人麻豆 | 97精品电影院 | 在线超碰av | 亚洲美女精品区人人人人 | 中文字幕网站视频在线 | 国产91精品在线观看 | 日韩精品一区二区三区中文字幕 | 免费看黄在线观看 | 欧美精品一区二区性色 | 免费看三级 | 亚洲国产精品久久久久婷婷884 | 久久99久久99免费视频 | 国产vs久久| 韩日av在线 | 玖玖精品在线 | 毛片一二区| 久草精品视频在线观看 | 91精品人成在线观看 | 午夜视频播放 | 免费av影视 | 国产麻豆精品传媒av国产下载 | 在线一级片| 久久人人爽爽人人爽人人片av | 欧美一级片播放 | 在线观看视频免费播放 | 人人精品久久 | 精品一区二区免费 | 午夜视频在线观看一区二区三区 | 亚洲人成人天堂h久久 | 天天干人人插 | 国产97视频 | 国产一级在线视频 | 亚洲一区视频免费观看 | 永久精品视频 | 97涩涩视频 | 91视视频在线直接观看在线看网页在线看 | 国产香蕉视频在线观看 | 香蕉网站在线观看 | 国产精品久久久久永久免费观看 | 国产在线不卡精品 | 四虎影视精品 | 国产成人av电影在线观看 | 久久精品福利 | 玖玖玖精品 | 中文字幕在线观看三区 | 国产精品123 | 免费亚洲视频 | 一区二区三区四区在线 | 国产亚洲小视频 | 国产精品免费久久久久影院仙踪林 | 操操操日日 | 黄色小说免费在线观看 | 免费观看v片在线观看 | 中文av日韩 | 超碰97公开 | 在线观看成人网 | 99视屏| 六月丁香社区 | 亚洲人成网站精品片在线观看 | 96看片 | 欧美日韩亚洲国产一区 | 午夜精品久久一牛影视 | 一级一片免费看 | 久久福利| 成人免费视频播放 | 中文字幕在线免费播放 | 日本精品午夜 | 国产99久久久精品视频 | 91久久久久久久一区二区 | 欧美日韩视频免费 | 国产精品久久久免费看 | 亚洲第一成网站 | 中文字幕一区二区三区久久蜜桃 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 国产日韩欧美自拍 | 亚洲国产精品推荐 | 欧美日韩在线看 | 97爱爱爱 | 欧美日韩国产在线精品 | 欧美性极品xxxx娇小 | 一区二区三区四区精品 | 97超碰免费在线观看 | 国产69精品久久99不卡的观看体验 | 97品白浆高清久久久久久 | 日本一区二区不卡高清 | 99热在线免费观看 | av大全免费在线观看 | 99超碰在线播放 | 免费高清国产 | 天天拍天天色 | 一级黄色片在线播放 | 国产无吗一区二区三区在线欢 | 日本中文在线 | 2024国产精品视频 | 狠狠狠色狠狠色综合 | 亚洲电影网站 | 欧美精品乱码久久久久久按摩 | 69国产成人综合久久精品欧美 | 丁香婷婷综合激情 | 亚洲高清91| 亚洲精品久久久久久久蜜桃 | 97精品国产97久久久久久春色 | 日本精品一区二区三区在线播放视频 | 大荫蒂欧美视频另类xxxx | 色午夜影院 | 97成人精品视频在线观看 | 婷婷色亚洲 | 黄色三级免费网址 | 黄色三级网站在线观看 | 又粗又长又大又爽又黄少妇毛片 | 特黄特黄的视频 | 国产一级黄 | 欧美韩国在线 | 中文字幕av在线 | 久久这里只有精品久久 | 一区二区三区在线免费观看视频 | 欧美日韩亚洲在线 | 亚洲精品www久久久 www国产精品com | av视屏在线 | av大全在线观看 | 国产一区久久 | 96国产精品 | 欧美日韩在线视频一区 | 欧美一级片 | 肉色欧美久久久久久久免费看 | 亚洲精品天天 | 在线激情网 | 精品国产久| 色婷婷视频网 | 最近免费中文视频 | 人人爱在线视频 | 安徽妇搡bbbb搡bbbb | av在线之家电影网站 | 中文字幕日韩无 | 黄色av免费 | 国产破处精品 | 久久国产精品一区二区三区 | 国产一级电影免费观看 | 久久免费视频这里只有精品 | 又湿又紧又大又爽a视频国产 | www.久热| 中文字幕在线观看一区二区三区 | 五月天综合网站 | 亚洲精品国产第一综合99久久 | 成人在线电影观看 | 国产黄色美女 | 国产97在线播放 | 黄色免费看片网站 | 色射色| 免费成人黄色片 | 嫩草伊人久久精品少妇av | 99精品美女 | 亚洲禁18久人片 | 欧美一级片免费观看 | 91av视频观看 | 天天综合在线观看 | 久久图| 久久久久久久久影视 | 国产精品免费麻豆入口 | 黄色av网站在线观看免费 | 国产精品一码二码三码在线 | 免费在线观看日韩欧美 | 日韩精品免费一区二区在线观看 | 九色最新网址 | 欧美一级欧美一级 | 国产高清无av久久 | 国产精品久久久久久久久久久久久 | 欧美一区二区免费在线观看 | 色播六月天 | 欧美日韩视频在线 | 色综合天天色综合 | 九九久久影院 | 99久久精品国产欧美主题曲 | 99re久久精品国产 | 国产91全国探花系列在线播放 | 人人狠狠综合久久亚洲 | 最新日韩电影 | 国产做aⅴ在线视频播放 | 日韩高清二区 | 在线观看完整版免费 | 国产69精品久久久久99 | 最新久久免费视频 | 99久久9 | 国产一区久久久 | 免费在线观看国产精品 | 欧美aa级 | 国产免费一区二区三区最新6 | 又黄又爽又无遮挡的视频 | 99色在线 | 91中文字幕视频 | 欧美日韩精品在线观看 | 99久久国产免费免费 | 精品国产久 | 亚洲免费一级电影 | 日韩在线中文字幕视频 | 九九av| 亚洲一级电影 | 美女黄频免费 | 国产91电影在线观看 | 中文字幕在线视频精品 | 99精品视频99 | 在线观看91视频 | 国产精品成人久久久 | 不卡av在线播放 | 亚洲精品av中文字幕在线在线 | 狠狠色综合网站久久久久久久 | av久久久 | 午夜黄色| 日韩动态视频 | 日本精品久久久久中文字幕5 | 欧美一区二区精品在线 | 久久免费国产精品 | 国产高清免费视频 | 成人亚洲免费 | 久久免费精品一区二区三区 | 狠狠狠色丁香婷婷综合久久88 | 亚州av网站 | 国产视频久久久久 | 超碰在线个人 | 免费看一级黄色 | 日韩精品一区二区三区视频播放 | 99久热在线精品 | 国产三级精品三级在线观看 | 蜜臀精品久久久久久蜜臀 | 欧美ⅹxxxxxx | a天堂一码二码专区 | 日本九九视频 | 欧美亚洲久久 | 国内外激情视频 | 亚洲精品久久久久久国 | 亚洲黄色片在线 | 手机在线看永久av片免费 | 天天看天天干天天操 | 91porny九色91啦中文 | 亚洲 欧美 变态 国产 另类 | 在线视频精品播放 | 日本公妇在线观看高清 | 色福利网| 色福利网站| 欧美一区二区三区激情视频 | 狠狠色丁香婷婷综合视频 | 欧美一区二视频在线免费观看 | 一区二区三区视频网站 | 欧洲精品视频一区二区 | 在线观看资源 | 久草网免费 | 免费精品国产 | 视频福利在线 | 欧美激情va永久在线播放 | 午夜av电影院 | 美女视频黄色免费 | 综合色天天| 夜夜躁狠狠躁日日躁视频黑人 | 国产小视频在线免费观看视频 | 亚洲春色奇米影视 | 成年人毛片在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 欧美一二区视频 | 探花视频在线观看+在线播放 | 久草在线视频看看 | 日夜夜精品视频 | 麻豆你懂的 | 午夜视频一区二区 | 国产在线播放一区 | 国内精品久久久久久久影视简单 | 久草在线资源观看 | 国产亚洲激情视频在线 | 国产中文字幕在线视频 | 激情网五月 | av免费片| 成人国产精品入口 | 亚洲免费成人 | av天天草 | 天天干夜夜夜操天 | 欧美日韩一级视频 | 久久国产福利 | 日韩久久久久久久久 | 欧美性生交大片免网 | 亚洲精品在线看 | 成人性生活大片 | av免费在线播放 | 国产精品综合在线 | 亚洲国产成人在线播放 | 黄色网址在线播放 | 日韩精品中文字幕在线不卡尤物 | 久久亚洲视频 | www.com在线观看 | 亚洲精品久久久蜜臀下载官网 | 色九九视频| 国产高清视频在线播放 | 色网站免费在线观看 | 天天超碰 | 亚洲成a人片在线观看网站口工 | 最新动作电影 | 青草视频在线看 | 天堂黄色片 | 久久成人精品电影 | 午夜12点 | 国产在线精品二区 | 欧美另类成人 | 国产精品麻豆三级一区视频 | 国产精品久久久久久久久免费 | 狠狠干2018| 国产精品99久久久久久宅男 | 91av在线视频免费观看 | 一色av| 日韩性xxxx | 超级碰视频 | 国产在线传媒 | 色999在线| 蜜臀aⅴ精品一区二区三区 久久视屏网 | a电影免费看 | 青草视频在线播放 | 国产二区精品 | 奇米影视四色8888 | 精品在线不卡 | 国产精品video爽爽爽爽 | 黄色三级网站 | 久久精品欧美日韩精品 | 97碰碰碰| 久久久久久久久久免费视频 | 国产在线观看国语版免费 | 国产69久久久欧美一级 | 在线观看免费视频 | 亚洲伦理中文字幕 | 国产 视频 久久 | 成人一级黄色片 | 中文字幕一区2区3区 | 国产精品久久久久久一区二区三区 | 色噜噜狠狠色综合中国 | 色黄视频免费观看 | 99国产精品久久久久久久久久 | 欧美精品一区在线发布 | 国产一级大片在线观看 | 999久久a精品合区久久久 | 午夜精品区 | 国产色黄网站 | 久草在线免费播放 | 人人爽人人av | 婷婷激情久久 | 亚洲在线视频观看 | 热九九精品 | 456免费视频| 成人毛片100免费观看 | 国产青春久久久国产毛片 | 久草视频免费在线观看 | 国产一级片在线播放 | 久久男人中文字幕资源站 | 91精品亚洲影视在线观看 | 91精品中文字幕 | 精品欧美一区二区三区久久久 | 日韩网站在线观看 | 久久午夜免费视频 | 天天天干天天射天天天操 | 中文字幕成人在线 | 99久热在线精品视频观看 | 久久不卡免费视频 | 国产九色视频在线观看 | 国际精品久久久久 | 四虎成人精品永久免费av | 欧美狠狠操 | 五月天国产 | 欧美国产在线看 | 91超碰在线播放 | 久操视频在线 | 精品视频久久久 | 97超碰免费在线 | 天天操天天曰 | 99产精品成人啪免费网站 | 日韩午夜视频在线观看 | 国产一二区免费视频 | 视频一区在线免费观看 | 最新国产精品视频 | 天堂资源在线观看视频 | 激情欧美xxxx | 中文字幕在线视频一区二区三区 | 成人中文字幕+乱码+中文字幕 | 黄色aa久久| 亚洲精品色视频 | 成人v| 婷婷五月在线视频 | 国产999| 天天操比| 最新av在线网站 | 午夜国产在线观看 | 国产在线观看xxx | 久久精品视 | 国产成人三级一区二区在线观看一 | 99自拍视频在线观看 | 2019中文字幕第一页 | 日韩电影中文字幕在线观看 | 在线亚洲人成电影网站色www | 国产无遮挡又黄又爽在线观看 | 久久久网站 | 在线免费av网 | 久久国产亚洲精品 | 国产99精品在线观看 | 日日日日 | 亚洲精品成人在线 | 国产一级二级视频 | 久久久久在线 | 一本一本久久aa综合精品 | 九九九热精品 | 黄色a视频免费 | 亚洲精品在线免费观看视频 | 一区二区三区在线免费 | 狠狠婷婷| 手机av在线网站 | 99久久99久久精品国产片 | 青草视频在线 | 精品久久久久久一区二区里番 | 国产69久久久欧美一级 | 日日夜夜免费精品 | 久久精品99国产国产精 | 麻豆一区二区 | 国产特级毛片 | 黄色特一级 | 国产美女精品视频 | 在线观看免费成人 | 亚洲一区二区麻豆 | 欧美激情视频一区二区三区免费 | 亚洲综合视频在线 | 久久五月天综合 | 99在线观看 | 97av精品 | 亚洲精品国产精品国自产在线 | 91九色丨porny丨丰满6 | 久久永久免费视频 | 欧美激情综合色综合啪啪五月 | 久久高清av | 日韩精品免费一区二区在线观看 | 国产字幕av | 欧美色图30p | 久草在线观 | www.午夜 | 国产精品ssss在线亚洲 | 黄色av一级 | 天天草天天干天天射 | 国内三级在线 | 欧美精品一区二区在线观看 | 美女黄视频免费 | 91成人精品一区在线播放69 | 日韩专区在线观看 | 国产黄在线免费观看 | 国产中文在线字幕 | 久草色在线观看 | 欧美精品久久久久 | 国产精品精品久久久久久 | japanese黑人亚洲人4k | 色操插| 91在线观看欧美日韩 | 涩涩资源网| 欧美日韩观看 | 超碰在线天天 | 久久人人艹| 五月婷婷在线观看视频 | 日韩艹| 日韩视频一二三区 | 国产字幕在线观看 | 中文字幕在线观看一区二区三区 | 人人添人人澡人人澡人人人爽 | 国产字幕在线看 | 伊人天天操 | 中文字幕乱码电影 | 一区二区精品在线 | av色一区 | 欧美午夜理伦三级在线观看 | 国产精品美女久久久久久久久久久 | 国产精品毛片一区二区 | 久久免费看视频 | 国产h在线播放 | 婷婷色5月 | 五月天婷婷在线观看视频 | 国产成人av网址 | 久久久精品国产免费观看一区二区 | 精品人人爽 | 亚洲jizzjizz日本少妇 | 婷婷激情小说网 | 欧美最猛性xxxx | 亚洲永久精品一区 | 国产成人久久av免费高清密臂 | 色a4yy| 色先锋av资源中文字幕 | 伊人成人久久 | 美女免费视频一区 | 成年人看片 | 成人在线一区二区三区 | 免费成人av电影 | 欧美日韩视频在线观看一区二区 | 欧美一级片播放 | 三级黄免费看 | 91精品入口| av在线网站大全 | av在线免费观看不卡 | 日韩中文字幕在线观看 | 免费av看片 | 久久国产精品成人免费浪潮 | 国产精品视频免费在线观看 | www.色婷婷.com | 亚洲国产资源 | 99久久国产免费免费 | 国产精品资源网 | 久久综合九色综合欧美就去吻 | 久久99国产精品久久99 | 99精品热视频 | 中文字幕高清在线播放 | 456成人精品影院 | 91看片在线免费观看 | 狠狠撸电影 | 久草在线视频免赞 | 欧美一区日韩一区 | 久久免费激情视频 | 久久久久久国产一区二区三区 | 在线观看www91 | 欧美精品久久久久久久久久久 | 日本精品久久久久久 | 日韩偷拍精品 | 6080yy午夜一二三区久久 | 天天天操天天天干 | 国内精品久久久久久久久 | mm1313亚洲精品国产 | 久久久久久久久久久久影院 | 欧美日韩视频免费 | 欧美精选一区二区三区 | 伊人婷婷激情 | a在线免费| 99精品国产一区二区三区麻豆 | 91资源在线观看 | 午夜精品999 | 久久成人久久 | 99久久久久久久久 | 亚洲一区二区三区毛片 | 99在线观看视频网站 | 精品成人a区在线观看 | 亚洲日本va在线观看 | 成人av免费在线播放 | 国产精品久久久网站 | 成人久久国产 | av资源在线观看 | www久久精品 | 中文字幕观看在线 | 欧美日韩国产伦理 | 中文字幕在线看视频 | 欧美精品三级 | 国产一级片免费视频 | 欧美日韩精品在线 | 国产在线va | 精品久久久网 | 亚洲精品国 | 一 级 黄 色 片免费看的 | 日本黄色一级电影 | 国产一区电影在线观看 | 狠狠色丁香婷婷综合久小说久 | 五月婷婷综合激情网 | 国产无限资源在线观看 | 精品国产一区二区三区久久 | 久久精品一区二区国产 | 久久久久久久久久久免费视频 | 国产无套精品久久久久久 | 丁香婷婷激情五月 | 69国产在线观看 | 天堂资源在线观看视频 | 不卡中文字幕在线 | 日韩av综合网站 | 成人av动漫在线观看 | 丁香六月色 | 992tv人人网tv亚洲精品 | 2020天天干夜夜爽 | 蜜桃av观看 | 丰满少妇在线观看资源站 | 特级黄色视频毛片 | 国产精品久久久区三区天天噜 | 91网站免费观看 | 在线精品视频免费播放 | 亚洲欧美成人综合 | 少妇自拍av | av网站在线观看播放 | 外国av网 | 久久精品综合网 | 日日色综合 | 婷婷激情小说网 | 色999精品| 久久在视频 | 天天干天天色2020 | 欧美色图一区 | 免费在线观看中文字幕 | 狠狠干2018 | 五月婷婷综 | 日韩精品在线视频免费观看 | 欧美激情第十页 | 欧美亚洲国产日韩 | 在线成人免费电影 | 中国一级片在线播放 | 国产一级电影免费观看 | 粉嫩av一区二区三区四区在线观看 | 欧美 日韩 性 | 色综合久久综合 | 91久久国产自产拍夜夜嗨 | 欧美人交a欧美精品 | 国产伦理一区二区三区 | 91在线免费看片 | 国产高清在线观看 | 国产精品麻豆视频 | 亚洲欧美日韩国产精品一区午夜 | 欧美日韩国产精品一区二区 | 国产一区二区久久精品 | 国产精品高清一区二区三区 | 国产剧情久久 | 97久久精品午夜一区二区 | 天天操天天爱天天干 | 国产精品99免视看9 国产精品毛片一区视频 | 亚洲四虎在线 | 粉嫩av一区二区三区四区在线观看 | 日日天天av | 欧美va天堂va视频va在线 | 尤物九九久久国产精品的分类 | 亚洲闷骚少妇在线观看网站 | a午夜在线| 国产专区视频在线 | 日韩电影在线观看一区二区 | 精品国偷自产国产一区 | 久久九九影视网 | 天天弄天天干 | 九九热免费在线观看 | 操操操av | 91污在线| 中文电影网 | 欧美日韩不卡在线 | 黄色片网站av | 国产在线精品福利 | 人人爱人人爽 | 精品国产乱码久久久久久天美 | 日日夜夜亚洲 | 69精品视频在线观看 | 国产福利91精品张津瑜 | 久久免费成人精品视频 | 久章草在线观看 | 久久久久高清毛片一级 | 亚洲久草网 | 中文字幕 国产 一区 | 夜夜高潮夜夜爽国产伦精品 | 一本一本久久a久久精品牛牛影视 | 十八岁以下禁止观看的1000个网站 | av手机在线播放 | 国产精品成久久久久 | 久久99久久99免费视频 | 久久久精品99 | 国产91粉嫩白浆在线观看 | 色网av| 日日日网 | 99免费在线观看视频 | 天天射,天天干 | 成人午夜剧场在线观看 | 91亚洲视频在线观看 | 久久av在线播放 | 日韩有码第一页 | 黄色毛片电影 | 久久久久久97三级 | 久久激情视频 久久 | 中文字幕永久免费 | 婷婷中文字幕 | 亚洲狠狠干 | 视频在线日韩 | 婷婷伊人网 | 精品国产免费一区二区三区五区 | www.夜夜干.com | 久久综合久久88 | 国产精品久久久久久久久费观看 | 日韩一级黄色片 | 久久一区二区三区国产精品 | 天天射综合 | 精品a视频| 国产视频1 | 亚洲三级黄色 | av片无限看 | 国产精品久久久久av福利动漫 | 亚洲闷骚少妇在线观看网站 | 婷婷色综合 | 一级α片免费看 | 婷婷在线资源 | 日韩色中色| 久久人人爽人人爽人人 | www.av中文字幕.com | 欧美另类xxxx | 亚洲国产精品va在线看黑人 | 欧美日韩一区二区免费在线观看 | 91麻豆视频| 免费能看的黄色片 | 97超碰中文字幕 | 国产亚洲精品久久久久久无几年桃 | 亚洲狠狠婷婷 | 在线免费观看成人 | 成人av日韩 | 欧美日韩国产一区 | 精品国产a| 亚洲精品国产免费 | 亚洲欧美偷拍另类 | 亚洲狠狠婷婷 | 亚洲日本va午夜在线电影 | 国产96视频| 欧美一区二区三区在线视频观看 | 中文字幕频道 | 成年人免费av | 久久精品视频在线观看免费 | 国外成人在线视频网站 | 久久久久久久亚洲精品 | 激情网站免费观看 | 91精品国产乱码 | 天堂成人在线 | 精品特级毛片 | 天天艹日日干 | 国产在线综合视频 | 国产一级视频在线 | 91精品办公室少妇高潮对白 | 97色综合 | 丁香电影小说免费视频观看 | 久久伊人色综合 | 97自拍超碰| 午夜性色| www国产一区 | 麻豆视频免费入口 | 婷婷激情综合五月天 | 久久久91精品国产一区二区三区 | 91av在线播放视频 | 免费av观看网站 | 午夜久久| 天天做天天爱天天爽综合网 | 亚洲一区久久久 | 日韩在线不卡av | 91精品在线免费 | 在线免费观看黄色小说 | 在线观看视频 | 182午夜在线观看 | 日精品 | av免费播放| 国内久久精品 | 四虎在线免费视频 | 日韩大片在线播放 | 精精国产xxxx视频在线播放 | 国产一区二区三区黄 | 中文字幕黄色 | 久久人网 | 亚洲五月婷 | 欧美性天天 | 久久久亚洲电影 | 黄色av电影网 | 超碰最新网址 | 亚洲日本韩国一区二区 | 手机av网站 | av色影院| 国产+日韩欧美 | 免费久久99精品国产 | 91精品国产91久久久久 | 久久伦理电影网 | 久久国产视屏 | bayu135国产精品视频 | 日韩免费一级电影 | 99热这里精品 | 精品国产色 | 亚洲精品在线视频网站 | 国产又黄又硬又爽 | 国产伦精品一区二区三区免费 | 在线观看一二三区 | 精品女同一区二区三区在线观看 | 日韩久久精品一区二区三区下载 | 日本久久影视 | 国产五月婷 | 国产精品久久久久久久久婷婷 | 在线日韩中文 | 欧美一区二区三区四区夜夜大片 | 久久99最新地址 | 久久久片 | 在线小视频| 日韩午夜高清 | 久久激情影院 | 亚洲视频精品在线 | 91高清免费看 | 免费黄色在线网站 | 99综合电影在线视频 | 国产成人精品一区二 | 精品在线免费观看 | 天堂在线一区二区 | av电影免费 | 日韩一区二区三免费高清在线观看 | 一本一本久久a久久精品综合 | 成人黄色电影免费观看 | 久久成人一区 | 国产永久免费 | 美女视频是黄的免费观看 | 精品国产一区二区三区四区在线观看 | 久久成人高清视频 | 五月天精品视频 | 96国产精品视频 | 亚洲经典视频在线观看 | 超薄丝袜一二三区 | 免费在线一区二区 | 日日夜夜精品免费 | 国产视频亚洲精品 | 日韩电影黄色 | 午夜在线免费观看视频 | 国产精品福利久久久 | 亚洲专区一二三 | 日韩视频免费 | 天天射射天天 | wwxxxx日本 | 在线精品视频在线观看高清 | 婷婷在线综合 | 日韩精品在线视频 | 中文字幕网站 | 九九热在线精品 | 女人高潮一级片 | 亚洲成人av片在线观看 | 亚洲一级片在线看 | 欧美91精品久久久久国产性生爱 | 日日干天天爽 | 久久久91精品国产一区二区三区 | 久九视频 | 日韩中文字幕免费在线播放 | 日韩伦理片一区二区三区 | 国产精品成人久久久久 | 国产美女精品视频免费观看 | 欧美精品乱码久久久久久按摩 | 丁香婷婷色综合亚洲电影 | 日韩在线| av高清不卡 | www.91国产 | 五月天亚洲婷婷 | 特级xxxxx欧美 | 亚洲精品xxx | 97超碰国产精品女人人人爽 | av千婊在线免费观看 | 亚洲国产高清视频 | 97超碰资源网 | 成人久久影院 | 精品一二三四在线 | 色偷偷88888欧美精品久久 | 日韩精品三区四区 | 久久无码av一区二区三区电影网 | 成人在线播放视频 | 精品一二 | 超碰av在线播放 | 久久久 激情 | 久久精品国产99国产 | 99婷婷狠狠成为人免费视频 | 亚洲最快最全在线视频 | 国产精品久久艹 | 青春草免费在线视频 | 日本中文乱码卡一卡二新区 | 国产一卡二卡在线 | 色狠狠操| 久草电影免费在线观看 | 九九视频网 | 久久这里只有精品视频首页 | 亚洲欧美精品一区二区 | 天天干 天天摸 天天操 | 久久精品播放 | 一区二区av | 91成人蝌蚪 | 这里只有精品视频在线观看 | 久久午夜免费观看 | 中文字幕精品三区 | 亚洲国产精品成人女人久久 | 亚洲激情久久 | 国产精品 中文字幕 亚洲 欧美 | 精品一区久久 | 成人免费观看视频网站 | 久久热首页| 日韩av不卡在线播放 | 国产成人精品久久久 | 成人h在线 | 国产精品综合在线 | 美女国内精品自产拍在线播放 | 美女视频黄免费网站 | 国产美女精品 | 欧美一级久久 | 黄色成人av | 高清国产午夜精品久久久久久 | 国产美腿白丝袜足在线av | 成人av在线电影 | 日韩一级理论片 | 色就色,综合激情 | 夜夜高潮夜夜爽国产伦精品 | 热99在线| 日本久久免费视频 | 国产美女视频免费 | 久久久久国产精品www | 毛片无卡免费无播放器 | 日韩va欧美va亚洲va久久 | 国产视频欧美视频 | 黄色一级免费网站 | 亚洲一区天堂 | 久久香蕉一区 | 欧美视频国产视频 | 亚洲成人欧美 | 成人免费观看大片 | 国产又粗又猛又爽又黄的视频免费 | 久久久久久久久久久久久久免费看 | 丁香五月亚洲综合在线 | 日本巨乳在线 | 不卡视频在线 | 一级黄毛片 | 悠悠av资源片 | 日韩精品一区二区不卡 | 久久少妇| 亚洲视频 在线观看 | 一级黄色免费网站 | 国产一级片在线播放 | 二区三区在线观看 | 日韩高清二区 | 精品在线亚洲视频 | 天天操天天射天天爱 | 狠狠色丁香婷婷综合久小说久 | 毛片一区二区 | 国产精品一区二区久久久久 | 欧美精品首页 | 国产一区欧美日韩 | 狠狠色狠狠色 | 夜夜操网站 | 在线av资源 | 免费网站v | 成人毛片久久 | 91亚洲成人 | 中文亚洲欧美日韩 | 亚洲日本va中文字幕 | 亚洲精品视频在线观看免费视频 | 精品亚洲男同gayvideo网站 | 国产视频99| 亚洲人片在线观看 | a黄色| 丁香婷婷久久久综合精品国产 | 中文字幕在线播放第一页 | 日韩一级网站 | 在线之家免费在线观看电影 | 国产精品一区久久久久 | 婷婷丁香导航 | 福利久久| 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 99久热在线精品视频成人一区 | 美女网站视频一区 | www.日日日.com| 亚洲最新视频在线播放 | 欧美日韩一二三四区 | 韩国av免费看 | 中文字幕免费高清 | 在线观看日韩一区 | 中文字幕成人在线 | 91网页版免费观看 | 91x色 | 亚洲精品播放 | 91一区啪爱嗯打偷拍欧美 | 久久久精品二区 | 国产精品久久久久久久久久久杏吧 | 国产 在线 高清 精品 | 国产黄色精品在线 | 国产精品久久久久国产精品日日 | 一区二区三区在线视频111 | 992tv在线成人免费观看 | 亚洲麻豆精品 | 免费a现在观看 | 亚洲天堂自拍视频 | 日精品 | 日日夜夜综合网 | 欧美日韩不卡在线 | 97碰碰精品嫩模在线播放 | 一区二区三区在线电影 | 国产五十路毛片 |