C# Fast & Clean Solution Time: 107 ms (100.00%), Space: 61.4 MB (33.33%)
\npublic class Solution \n{\n    private bool IsLegal(string num)\n    {\n        //\'1\' \'.\'\n        if(num.Length == 1) return num != ".";\n        \n     
```\npublic class Solution \n{\n    private bool IsLegal(string num)\n    {\n        //\'1\' \'.\'\n        if(num.Length == 1) return num != ".";\n        \n        //\'00\' \'001\' \'00.01\'\n        if(num[0] == \'0\' && num[1] == \'0\') return false;\n        \n        int decimalPointIdx = num.IndexOf(\'.\');\n        \n        //01.2\n        if(num[0] == \'0\' && decimalPointIdx != 1) return false;\n        \n        //\'.1\'\n        if(decimalPointIdx == 0) return false;\n        \n        //\'123\' \'01\'\n        if(decimalPointIdx == -1) return num[0] != \'0\';\n        \n        //\'0.0\' \'0.00\' \'1.0\'\n        return num.Last() != \'0\';\n    }\n    \n    private List<string> GetAllDecimals(string num)\n    {\n        var list = new List<string>();\n        \n        if(IsLegal(num)) list.Add(num);\n        \n        for(int i = 1; i < num.Length; i++)\n        {\n            var currNum = num.Insert(i, ".");\n            if(IsLegal(currNum)) list.Add(currNum);\n        }\n\t\t\n        return list;\n    }\n    \n    public IList<string> AmbiguousCoordinates(string s) \n    {\n        var input = s.Substring(1, s.Length-2);\n        var output = new List<string>();\n        var firstHalf = new StringBuilder();\n        \n        for(int i = 0; i < input.Length-1; i++)\n        {\n            firstHalf.Append(input[i]);\n            var secondHalf = input.Substring(i+1);\n            \n            var firstList = GetAllDecimals(firstHalf.ToString());\n            var secondList = GetAllDecimals(secondHalf);\n            \n            foreach(var firstNum in firstList)\n                secondList.ForEach(secondNum => output.Add("(" + firstNum + ", " + secondNum + ")"));\n        }\n        \n        return output;\n    }\n}\n```
[]