backtracking and invariant during generating the parathese

righjt > left  (open bracket and cloase barckst)

  1. class Solution {
  2. //["((()))","(()())","(())()","()(())","()()()","())(()"] wrong case --> change right > left the numebr of bracket is the invariant
  3. List<String> res = new ArrayList<>();
  4. public List<String> generateParenthesis(int n) {
  5. //back((new StringBuilder()).append('('),2*n, 1, n, n);
  6. back((new StringBuilder()), 2*n, 0, n, n);
  7. return res;
  8. }
  9. void back(StringBuilder temp, int n, int pos, int left, int right){//pos start from 1
  10. if(pos >= n){
  11. //temp.append(")"); // problem from here
  12. System.out.println(pos);
  13. res.add(temp.toString());
  14. return;
  15. }
  16. if(left > 0 ){
  17. temp.append("(");
  18. back(temp,n, pos+1, left-1, right);
  19. temp.setLength(temp.length()-1);
  20. }
  21. if(right > left ){
  22. temp.append(")");
  23. back(temp, n, pos+1, left, right-1);
  24. temp.setLength(temp.length()-1);
  25. }
  26.  
  27. }
  28. }

Restore IP Addresses

//insert element into the string

  1. class Solution {
  2. //invariant rule: each number are
  3. // use the immuniateble of String
  4. List<String> res = new ArrayList<String>();
  5. public List<String> restoreIpAddresses(String s) {
  6. back(0, s, new String(), 0);
  7. return res;
  8. }
  9.  
  10. void back(int next, String s, String str , int num){ //num: there are only three dots.
  11. if(num == 3){
  12. //if(next==s.length()) return;
  13. if(!valid(s.substring(next, s.length()))) return;
  14. res.add(str+s.substring(next, s.length()));
  15. return;
  16. }
  17. //for each step, move one digit or two or three
  18. for(int i = 1; i <=3; i++ ){
  19. //check string
  20. if(next+i > s.length()) continue;
  21. String sub = s.substring(next, next+i);//
  22. if(valid(sub)){
  23. back(next+i, s, str+sub+'.', num+1);
  24. }
  25. }
  26. }
  27. boolean valid(String sub){
  28. if(sub.length() == 0 || sub.length()>=4) return false;
  29. if(sub.charAt(0) == '0') {
  30. //System.out.println(sub.equals("0"));
  31. return sub.equals("0"); // not check '0' weired
  32. }
  33. int num = Integer.parseInt(sub);
  34. if(num >255 || num <0) return false;
  35. else return true;
  36. }
  37. }

//core idea: move one step or 2 step or three based on the question (0 - 255) also append . and substring

use string instead stringBuilder  (immuatable)

131. Palindrome Partitioning

  1. class Solution {
  2. //check palindrome, divide into small problems:
  3. List<List<String>> res = new ArrayList<List<String>>();
  4. public List<List<String>> partition(String s) {
  5. back(s, new ArrayList<String>());
  6. return res;
  7. }
  8. void back(String s, List<String> list){
  9. if(s.length()==0){
  10. List<String> temp = new ArrayList<>(list);
  11. res.add(temp);
  12. return ;
  13. }
  14.  
  15. for(int i = 0; i<s.length(); i++){//divide s into su and sub
  16. String su = s.substring(0, i+1);
  17. String sub = s.substring(i+1, s.length());
  18. if(isPalindrome(su)){
  19. list.add(su);
  20. back(sub,list);
  21. list.remove(list.size()-1);
  22. }
  23.  
  24. }
  25. }
  26. boolean isPalindrome(String su){
  27. if(su.length()==0){
  28. return true;
  29. }else {
  30. int i =0 , j = su.length()-1;
  31. while(i<j){
  32. if(su.charAt(i) != su.charAt(j)) return false;
  33. i++; j--;
  34. }
  35. return true;
  36. }
  37. }
  38. }

Leetcode 22. Generate Parentheses Restore IP Addresses (*) 131. Palindrome Partitioning的更多相关文章

  1. [LeetCode] 22. Generate Parentheses 生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  2. leetcode@ [22]Generate Parentheses (递归 + 卡特兰数)

    https://leetcode.com/problems/generate-parentheses/ Given n pairs of parentheses, write a function t ...

  3. LeetCode 22. Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  4. LeetCode(93) Restore IP Addresses

    题目 Given a string containing only digits, restore it by returning all possible valid IP address comb ...

  5. Java [leetcode 22]Generate Parentheses

    题目描述: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...

  6. LeetCode之“字符串”:Restore IP Addresses

    题目链接 题目要求: Given a string containing only digits, restore it by returning all possible valid IP addr ...

  7. [leetcode]22. Generate Parentheses生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  8. [leetcode.com]算法题目 - Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  9. 蜗牛慢慢爬 LeetCode 22. Generate Parentheses [Difficulty: Medium]

    题目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...

随机推荐

  1. LINUX下用PHPIZE安装PHP GD扩展

    环境:LNMP in centOS 6.4. linux下PHP的扩展可以用phpize的方法,比较简单地进行启用. 以下以PHP-GD2 库安装为例子. sudo yum install php-g ...

  2. redis安装及应用

    Redis安装及主从配置 server2,3,4. 安装 tar zxf redis-4.0.1.tar.gz cd redis-4.0.1 yum install -y gcc make make ...

  3. Spring Cloud 监控相关

    因为最近客户提出想监控Spring Cloud运行状况的需求,所以稍稍做了调研.目前了解的方法如下: Eureka Server启动后可以在根目录路径看到所有注册的Eureka Client状况 各个 ...

  4. python3 continue和break 区别

    for i in range(10): if i==5: continue #跳出当次循环 if i==8: break #跳出整个for循环 print(i)

  5. Java StringTokenzier

    Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串.如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你. public static v ...

  6. java——线程的wait()和notify()

    这是一个关于生产者和消费者的线程通信的例子: package thread_test; public class PCThread { public static void main(String[] ...

  7. 用navigator.geolocation.getCurrentPosition在IOS10以上的系统无法定位

    昨天老板告诉我代码有Bug(定位失败),于是各种测试最终发现IOS10以上版本手机不能成功(穷,买不起iphone,测试不完全),先贴失败代码: var city =""; nav ...

  8. android Activity启动过程(二)从ActivityManagerService的startActivity到栈顶Activity的onPause过程

    ActivityManagerService.startActivity() ActvityiManagerService.startActivityAsUser() ActivityStackSup ...

  9. RTT设备与驱动之PIN设备

    单片机的PIN有2个基本功能:GPIO和AFIO,其中gpio的常用功能: 1 输入:上拉.下拉.模拟.浮动 2 输出:上拉.下拉.推挽.开漏 3 中断:上升沿.下降沿.双沿.高电平.低电平触发 RT ...

  10. GridLayout(网格布局)

    常用属性: 排列对齐: ①设置组件的排列方式:  android:orientation=""     vertical(竖直,默认)或者horizontal(水平) ②设置组件的 ...