leetcode 816.模糊坐标

本文讲述了如何通过暴力枚举和字符串操作技巧解决一个涉及坐标表示的编程题目,重点在于去除括号、处理小数点和逗号空格的插入规则。作者强调了编程能力在解决问题中的重要性。
摘要由CSDN通过智能技术生成

这道题典型的暴力枚举,就是有点复杂罢了。可能刚开始想的时候会很痛苦,其实理清楚思路之后就好了,思路很简单,但是要想实现的话需要一定的编程能力,这道题其实考的并不是什么知识点,就是考验自己的编程能力的。所以这道题你可以想到,但是不一定做到,这是这道题的本质。

思路:

1.首先就是需要去除括号,这对我们判断坐标没有一点用。

2.你可以选择判断只有“, ”加入的情况,然后再去考虑“."加入的情况,或者先考虑“.”加入的情况,之后再考虑加入“, ”的情况。这里就用后者的判断做个例子。

3.先判断加入小数点的情况。第一,特殊情况:如果小数点左边有0,那么左边当且仅当只有一个0的时候才能构成一个符合条件的数字,即当字符串第一个位置是0的时候,只有在第二位加入小数点才符合题意,其他的不行;如果字符串只有一个0,直接返回结果就行了。第二,普遍情况:如果字符串的第一位不是0,那么小数点除了加在最后一位后面或者第一位前面,其他位置随便。

4.OK,那么之后就开始判断在加入小数点的基础之上加入逗号和空格的情形(逗号和空格是一起的,所以不要忽视)。首先,加入小数点的地方不能插入,第一个位置之前和最后一个位置之后不行。其次就是合法位置的判断:我们可以把字符串分为左右两部分进行判断,这里运用了string类型中的一个函数用法,就是substr(),这个函数可以了解一下,就是截取字符串的子串的,很方便。

上代码:

class Solution {
public:
vector<string>have_xiaoshu(string s){
    vector<string>res;
    if(s[0]!='0'||s=="0")
    res.push_back(s);
        for(int i=1;i<s.size();i++){
            if(i!=1&&s[0]=='0'||s.back()=='0')continue;//对开头是0的字符串进行筛选
            res.push_back(s.substr(0,i)+"."+s.substr(i));
        }
        return res;
}//初步判断对于原字符串去掉括号之后,只加入‘.‘的情形
    vector<string> ambiguousCoordinates(string s) {
        int n=s.size()-2;
        vector<string>res;
        s=s.substr(1,s.size()-2);//变相的去掉括号
        for(int i=1;i<n;i++){
            vector<string>left=have_xiaoshu(s.substr(0,i));
            if(left.empty())continue;
            vector<string>right=have_xiaoshu(s.substr(i));
            if(right.empty())continue;
            for(auto&it:left){
                for(auto&j:right){
                    res.push_back("("+it+", "+j+")");
                }
            }
        }
        return res;
    }
};

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值