leetcode 816. Ambiguous Coordinates | 816. 模糊坐标(Java)

x33g5p2x  于2022-01-13 转载在 Java  
字(1.3k)|赞(0)|评价(0)|浏览(193)

题目

https://leetcode.com/problems/ambiguous-coordinates/

题解

related topics 说是回溯,我偷了个懒,每次都 new 一个新的 String,就不用回溯了。

思路是:把字符串分割成左右两边,分别生成左 list 和右 list,然后左右 list 两两组合。

  1. class Solution {
  2. public List<String> ambiguousCoordinates(String s) {
  3. StringBuilder num = new StringBuilder(s.substring(1, s.length() - 1));
  4. List<String> result = new ArrayList<>();
  5. // 把num分成左右两半,分别拿到所有可能的数字,然后两两组合
  6. for (int i = 1; i < num.length(); i++) {
  7. List<String> left = getList(new StringBuilder(num.substring(0, i)));
  8. List<String> right = getList(new StringBuilder(num.substring(i, num.length())));
  9. for (String l : left) {
  10. for (String r : right) {
  11. result.add("(" + l + ", " + r + ")");
  12. }
  13. }
  14. }
  15. return result;
  16. }
  17. // 给字符串s加小数点,返回所有可能的结果
  18. public List<String> getList(StringBuilder s) {
  19. List<String> result = new ArrayList<>();
  20. for (int i = 1; i < s.length(); i++) {
  21. String cur = new StringBuilder(s).insert(i, ".").toString();
  22. if (isValid(cur)) result.add(cur);
  23. }
  24. if (isValid(s.toString())) result.add(s.toString());
  25. return result;
  26. }
  27. public boolean isValid(String s) {
  28. if (s.startsWith("00") || s.startsWith(".")) return false;
  29. if (s.contains(".") && s.endsWith("0")) return false;
  30. // 只要以0开头,所有后面不是小数点的字符串,都是耍流氓
  31. if (s.length() > 1 && s.startsWith("0") && s.charAt(1) != '.') return false;
  32. return true;
  33. }
  34. }

相关文章

最新文章

更多