93. 复原 IP 地址

image.png

  1. class Solution {
  2. public:
  3. bool isvalid(string& s,int start,int end)
  4. {
  5. //处理就三段数字的情况,最后一位是.
  6. if(start>end)return false;
  7. //处理开头为0的情况(除了单独一个0)
  8. if(s[start]=='0'&&start!=end)return false;
  9. //处理大小越界的情况
  10. int lastnum = 0;
  11. for(int i=start;i<=end;i++)
  12. {
  13. lastnum = lastnum*10 + s[i]-'0';
  14. if(lastnum>255)
  15. return false;
  16. }
  17. return true;
  18. }
  19. void backtracking(string& s,int startIndex,int pointNum)
  20. {
  21. //终止条件
  22. if(pointNum==3)
  23. {
  24. if(isvalid(s,startIndex,s.size()-1))
  25. result.push_back(s);
  26. return;
  27. }
  28. for(int i =startIndex;i<s.size();i++)
  29. {
  30. if(isvalid(s,startIndex,i))
  31. {
  32. s.insert(s.begin()+i+1,'.');
  33. pointNum++;
  34. backtracking(s,i+2,pointNum);
  35. pointNum--;
  36. s.erase(s.begin()+i+1);
  37. }
  38. else break;
  39. }
  40. }
  41. vector<string> restoreIpAddresses(string s) {
  42. backtracking(s,0,0);
  43. return result;
  44. }
  45. vector<string> result;
  46. };