image.png

解决思路

回溯

  1. class Solution {
  2. private List<String> res;
  3. private int n;
  4. String str;
  5. public List<String> restoreIpAddresses(String s) {
  6. res = new ArrayList<>();
  7. n = s.length();
  8. str = s;
  9. backtrack(0, "", 4);
  10. return res;
  11. }
  12. //flag为分为4段
  13. private void backtrack(int i,String temp,int flag){
  14. if (i == n && flag == 0){
  15. //去掉最后的.
  16. res.add(temp.substring(0,temp.length()-1));
  17. return;
  18. }
  19. if (flag < 0) return;
  20. for (int j = i;j < i + 3 && j < n;j++){
  21. //对0特别判断
  22. if (i == j && str.charAt(j) == '0'){
  23. backtrack(j + 1,temp + str.charAt(j) + ".",flag - 1);
  24. break;
  25. }
  26. //判断是否小于255
  27. if (Integer.parseInt(str.substring(i,j+1)) <= 255){
  28. backtrack(j + 1,temp + str.substring(i, j + 1) + ".",flag - 1);
  29. }
  30. }
  31. }
  32. }