【LeetCode】Day176-模糊坐标

题目

816. 模糊坐标【中等】

题解

首先在字符串s中枚举可以添加逗号和空格的位置,将s分为两个部分,前一部分x,后一部分y,然后对两个部分分别枚举小数点的位置(也可以不添加),

添加或者不添加小数点合法情况需要满足的条件:

  • 不添加小数点 或者 添加小数点后的整数部分需要满足 数字为0 或者 不含前导0的整数(即0.x或者1.x这样的,不能是00.x)
  • 添加小数点后,需要满足小数点后不为0(不能是x.0)
class Solution {
    public List<String> ambiguousCoordinates(String s) {
        int n=s.length();
        s=s.substring(1,n-1);//去掉括号
        List<String>res=new ArrayList<>();
        //去掉括号后s长度为n-2
        for(int i=1;i<n-2;i++){
            List<String>lt=getPos(s.substring(0,i));
            if(lt.isEmpty())    continue;
            List<String>rt=getPos(s.substring(i));
            if(rt.isEmpty())    continue;
            //组合成坐标
            for(String x:lt){
                for(String y:rt){
                    res.add("("+x+", "+y+")");
                }
            }
        }
        return res;
    }
    //列举小数点所有可能位置
    public List<String> getPos(String s){
        List<String>pos=new ArrayList<>();
        //添加不带小数点的数字
        if(s.charAt(0)!='0'||"0".equals(s))
            pos.add(s);
        for(int i=1;i<s.length();i++){
            //过滤前导0和末尾0
            if((i!=1&&s.charAt(0)=='0')||s.charAt(s.length()-1)=='0')
                continue;
            //添加带小数点的数字
            pos.add(s.substring(0,i)+"."+s.substring(i));
        }
        return pos;
    }
}

时间复杂度: O ( n 3 ) O(n^3) O(n3)

空间复杂度: O ( n 3 ) O(n^3) O(n3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值