• 模糊坐标


    题目

    我们有一些二维坐标,如 "(1, 3)" 或 "(2, 0.5)",然后我们移除所有逗号,小数点和空格,得到一个字符串S。返回所有可能的原始字符串到一个列表中。

    原始的坐标表示法不会存在多余的零,所以不会出现类似于"00", "0.0", "0.00", "1.0", "001", "00.01"或一些其他更小的数来表示坐标。此外,一个小数点前至少存在一个数,所以也不会出现“.1”形式的数字。

    最后返回的列表可以是任意顺序的。而且注意返回的两个数字中间(逗号之后)都有一个空格。

    示例 1:
    输入: "(123)"
    输出: ["(1, 23)", "(12, 3)", "(1.2, 3)", "(1, 2.3)"]
    示例 2:
    输入: "(00011)"
    输出:  ["(0.001, 1)", "(0, 0.011)"]
    解释:
    0.0, 00, 0001 或 00.01 是不被允许的。
    示例 3:
    输入: "(0123)"
    输出: ["(0, 123)", "(0, 12.3)", "(0, 1.23)", "(0.1, 23)", "(0.1, 2.3)", "(0.12, 3)"]
    示例 4:
    输入: "(100)"
    输出: [(10, 0)]
    解释:
    1.0 是不被允许的。

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/ambiguous-coordinates
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    枚举法

    • 解题思路
      首先处理括号,处理掉括号之后,处理逗号,逗号比较简单,逗号可以把数组分成N组。然后再循环着N组数,分别判断都在哪里可以插入小数点。插入完小数点的数是不是复合题目要求的数。
    public static List<String> ambiguousCoordinates(String s) {
            s=s.substring(1,s.length()-1);
            List<String> rs= new ArrayList<>();
            List<StringBuilder> list=new ArrayList<>();
            for (int i = 1; i < s.length(); i++) {
                StringBuilder sb  = new StringBuilder(s);
                sb.insert(i,',');
                list.add(sb);
            }
            for (StringBuilder sb:
                 list) {
                String num1= sb.toString().split(",")[0];
                String num2= sb.toString().split(",")[1];
                StringBuilder a = new StringBuilder();
                StringBuilder b = new StringBuilder();
                for (int i = 0; i < num1.length(); i++) {
                    a.append(num1);
                    if(i>0)
                    {
                        a.insert(i,".");
                    }
                    if(!isTrueNum(a.toString()))
                    {
                        a.setLength(0);
                        continue;
                    }
                    for (int j = 0; j < num2.length(); j++) {
                        b.append(num2);
                        if(j>0)
                        {
                            b.insert(j,".");
                        }
                        if(!isTrueNum(b.toString()))
                        {
                            b.setLength(0);
                            continue;
                        }
                        rs.add("("+a.toString()+", "+b.toString()+")");
                        b.setLength(0);
                    }
                    a.setLength(0);
                }
            }
            return rs;
        }
        public static boolean isTrueNum(String s)
        {
            if(s.charAt(0)=='0' && !s.contains(".") && s.length()>1)
            {
                return false;
            }
            if(s.charAt(s.length()-1)=='0' && s.contains("."))
            {
                return false;
            }
            if(s.charAt(0)=='0' && s.contains(".") && s.indexOf(".")>1)
            {
                return false;
            }
            return true;
        }
    
  • 相关阅读:
    如何在Eclipse中显示行号
    最值得听的100首英文歌
    ffmpeg示例一:源码
    编码解码中常用术语二
    ffmpeg.c(ffmpeg.exe)调试笔记一
    Debug ffmpeg.c & ffmpeg_g.exe in Ubuntu with Eclipse
    ubuntu下编译ffmpeg with libx264
    利用ffmpeg切割与合并视频(一)调用ffmpeg程序直接切割
    VMWare安装Ubuntu 12.10无法开启虚拟机的Unity Mode模式
    Atitit.基于dsl的methodinvoker
  • 原文地址:https://www.cnblogs.com/huacha/p/16866106.html
Copyright © 2020-2023  润新知