解题思路:
模拟。统计空格数以及单词数。
代码展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| class Solution { public: string reorderSpaces(string text) { int k = 0, n = text.size(), i; string t = ""; vector<string> word; for(i=0;i<n;i++){ if(text[i]==' ') k++; else{ t += text[i]; break; } } for(++i;i<n;i++){ if(text[i] == ' '){ k++; if(t!="") { word.push_back(t); t = ""; } }else{ t += text[i]; } } if(t!="") word.push_back(t); int w = word.size(); string ans = ""; ans += word[0]; if(w == 1){ for(int i=0;i<k;i++){ ans += " "; } }else{ for(int i=1;i<w;i++){ for(int j=0;j<k/(w-1);j++) ans+=" "; ans += word[i]; } for(int j=0;j<k%(w-1);j++) ans += " "; } return ans; } };
|
解题思路:
暴力枚举。递归搜索每一种情况。
代码展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #define mmax(x,y) (x)>(y)?(x):(y) class Solution { public: int ans = 0,n; string s; unordered_map<string,int> dic; int maxUniqueSplit(string s) { this->s = s; n = s.size(); dfs(0); return ans; } void dfs(int t){ if(t == n){ ans = mmax(ans,dic.size()); } string tmp = ""; for(int i=t;i<n;i++){ tmp += s[i]; if(!dic.count(tmp)){ dic[tmp]+=1; dfs(i+1); dic.erase(tmp); } } } };
|
解题思路:
递归。枚举所有情况,遇到0剪枝。
代码展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #define mmax(x,y) (x)>(y)?(x):(y) class Solution { public: typedef long long ll; static const ll mod = 1e9+7; ll ans = -1; int r,c; int grid[16][16]; int maxProductPath(vector<vector<int>>& grid) { r = grid.size(), c = grid[0].size(); for(int i=0;i<r;i++) for(int j=0;j<c;j++) this->grid[i][j] = grid[i][j]; dfs(0,0,1); return ans % mod; } void dfs(int i,int j,ll k){ if(i == r || j == c) return ; if(!grid[i][j]){ ans = mmax(ans,0); return ; } k = k * grid[i][j]; if(i == r-1 && j == c-1){ ans = mmax(ans,k); return ; } dfs(i+1,j,k); dfs(i,j+1,k); } };
|
做题情况:
AC 三题
排名:428 / 4115
总结反思:
做的很差,二三题都不难,卡了有点久。