Restore IP Addresses

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

For example:
Given "25525511135",

return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

 

思路:典型的DFS题目,确定好下一步状态,已经结束条件。

  1. ArrayList<String> res = new ArrayList<String>();
  2. StringBuffer cur = new StringBuffer();
  3. boolean isValid(String s1) {
  4. if(s1.charAt(0)=='0') return s1.compareTo("0") == 0;  //不能用==来判断,完全相等,包含地址
  5. if(Integer.parseInt(s1)>255 || Integer.parseInt(s1) < 0) return false;
  6. return true;
  7. }
  8. void helper(String s,int start,int index) {
  9. if(index == 4) { //结束条件
  10. if(start == s.length()) {
  11. res.add(new String(cur));
  12. }
  13. return;
  14. }
  15. for(int i=1;i<=3;i++) {
  16. if(start+i-1>=s.length()) break;
  17. String str = s.substring(start,start+i);
  18. if(isValid(str)) {
  19. int size = cur.length();
  20. String tmp ="";
  21. if(start!=0) {
  22. tmp = "." + str;
  23. } else {
  24. tmp = str;
  25. }
  26. cur.append(tmp);
  27. helper(s,start+i,index+1);
  28. cur = cur.delete(size,cur.length()); //恢复前一个状态,StringBuffer有些捉急
  29. }
  30. }
  31. }
  32. public List<String> restoreIpAddresses(String s) {
  33. int s1 = s.length();
  34. if(s==null || s1==0) return res;
  35. helper(s,0,0);
  36. return res;
  37. }

C++代码:

  1. vector<string> res;
  2. bool isValid(string &s,int start,int end) {
  3. string tmp = s.substr(start,end-start+1);
  4. if(tmp.at(0)=='0') return tmp=="0";
  5. int k=stoi(tmp);
  6. return k<=255 && k>=0;
  7. }
  8. void restoreIpAddressesHelper(string &s,string &cur,int count,int start) {
  9. if(count==4) {
  10. if(start==s.size()) {
  11. res.push_back(cur);
  12. }
  13. return;
  14. }
  15. for(int i=start;i<start+3&&i<s.size();i++) {
  16. if(isValid(s,start,i)) {
  17. int tmp=cur.size();
  18. cur+=s.substr(start,i-start+1);
  19. if(count<3) cur+='.';
  20. restoreIpAddressesHelper(s,cur,count+1,i+1);
  21. cur.resize(tmp);
  22. }
  23. }
  24. }
  25. vector<string> restoreIpAddresses(string s) {
  26. if(s.size()==0) return res;
  27. string cur;
  28. restoreIpAddressesHelper(s,cur,0,0);
  29. return res;
  30. }
posted @ 2014-07-31 23:52  purejade  阅读(96)  评论(0编辑  收藏  举报