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. POJ:2976 Dropping tests(二分+最大化平均值)

    Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...

  2. 上传文件插件dropzone的实例

    html: <div class="field"> <div id="file" class="dropzone"> ...

  3. lnmp 架构

    Mysql安装 tar zxf mysql-boost-5.7.17.tar.gz yum install -y gcc gcc-c++ yum install cmake-2.8.12.2-4.el ...

  4. 随性练习:excel中文字和链接存到html文件

    这是一个简单的练习,主要是将excel中文字和链接存到html文件中,并且可通过点击文字直通链接 excel格式如下图示,我这里得excel是07版的,所以用到xlrd模块 代码: import xl ...

  5. Mysql 游标的定义与使用方式

    创建游标: 首先在MySql中创建一张数据表: CREATE TABLE IF NOT EXISTS `store` (   `id` int(11) NOT NULL AUTO_INCREMENT, ...

  6. rails 里js 在production 只合并不压缩等问题,以及assets pipeline 加载js 在指定页面上

    因为刚学rails,试着做了一个小系统操作微信公共帐号, 之后部署的时候遇见了一个问题,整套系统在互联网端访问,非常的慢,而在手机端访问,10s后才会有响应, 打开chrome的调试工具,发现appl ...

  7. swing线程机制

    在介绍swing线程机制之前,先介绍一些背景概念. 背景概念 同步与异步:     同步是指程序在发起请求后开始处理事件并等待处理的结果或等待请求执行完毕,在此之前程序被阻塞(block)直到请求完成 ...

  8. Linux大文件快速处理小方法

    背景 工作中使用MapReduce任务导出一批含有路径的文件,共计行数300W+,需要检测文件是否在对应的服务器中存在,而文件所在的服务器并非hadoop集群的服务器,因此打算采用bash脚本进行.具 ...

  9. 修改mysql表的字符集

    ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 修改数据库字符集: 代码如下: ALTER DAT ...

  10. .NET面试题2

    常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆 ...