招商银行编程题-第六天
三道题
第一题
题目链接:https://leetcode-cn.com/problems/add-strings/
个人题解:大整数相加板子题
点击查看代码
class Solution {
public:
vector<int> add(vector<int>& A, vector<int>& B) {
vector<int> C;
for (int i = 0, t = 0; i < A.size() || i < B.size() || t; i ++ ) {
if (i < A.size()) t += A[i];
if (i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
return C;
}
string addStrings(string a, string b) {
vector<int> A, B;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
for (int i = b.size() - 1; i >= 0; i -- ) B.push_back(b[i] - '0');
auto C = add(A, B);
string c;
for (int i = C.size() - 1; i >= 0; i -- ) c += to_string(C[i]);
return c;
}
};
第二题
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/
个人题解:二分+哈希;
马拉车算法可以优化到线性的时间复杂度,但是特别偏,只能处理最长回文子串
点击查看代码
class Solution {
public:
string longestPalindrome(string s) {
string res;
for (int i = 0; i < s.size(); i ++ )
{
int l = i - 1, r = i + 1;// bab的情况
while (l >= 0 && r < s.size() && s[l] == s[r]) l --, r ++ ;
if (res.size() < r - l - 1) res = s.substr(l + 1, r - l - 1);
l = i, r = i + 1;// baab的情况
while (l >= 0 && r < s.size() && s[l] == s[r]) l --, r ++ ;
if (res.size() < r - l - 1) res = s.substr(l + 1, r - l - 1);
}
return res;
}
};
第三题
题目链接:
个人题解:经典动态规划
点击查看代码
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int a=grid.size(),b=grid[0].size();
if(a==0||b==0) return 0;
auto dp=vector<vector<int>> (a,vector<int>(b));
dp[0][0]=grid[0][0];
for(int i=1;i<a;i++) dp[i][0]=dp[i-1][0]+grid[i][0];
for(int j=1;j<b;j++) dp[0][j]=dp[0][j-1]+grid[0][j];
for(int i=1;i<a;i++)
{
for(int j=1;j<b;j++)
{
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j];
}
}
return dp[a-1][b-1];
}
};

浙公网安备 33010602011771号