第一題
沒啥好說的,簽到題。
public class Solution {
public int minTimeToVisitAllPoints(int[][] p) {
int ans=0;
for(int i=1;i<p.length;i++) {
ans+=Math.max(Math.abs(p[i][0]-p[i-1][0]), Math.abs(p[i][1]-p[i-1][1]));
}
return ans;
}
}
第二題
統計一下每行每列服務器個數就行了。
public class Solution {
public int countServers(int[][] g) {
int n=g.length;
int m=g[0].length;
int[] r=new int[n];
int[] c=new int[m];
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(g[i][j]==1) {
r[i]++;
c[j]++;
}
}
}
int ans=0;
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(g[i][j]==1&&(r[i]>=2||c[j]>=2))
ans++;
}
}
return ans;
}
}
第三題
想的太複雜了,其實數據範圍這麼小暴力即可,但pro的長度等於1e5該怎麼處理呢,用字典樹維護嗎?知道的大佬請在下方評論,我將在第一時間回覆您。
public class Solution {
public List<List<String>> suggestedProducts(String[] pro, String word) {
List<List<String>> ans=new ArrayList<List<String>>();
List<String> buf=new ArrayList<String>();
List<String> temp=new ArrayList<String>();
for(String s:pro)
buf.add(s);
for(int i=0;i<word.length();i++) {
temp.clear();
for(String s:buf) {
if(i>=s.length())
continue;
if(s.charAt(i)==word.charAt(i)) {
temp.add(s);
}
}
buf.clear();
buf.addAll(temp);
List<String> nowAns=new ArrayList<String>();
Collections.sort(buf);
for(int j=0;j<Math.min(3, buf.size());j++)
nowAns.add(buf.get(j));
ans.add(nowAns);
}
return ans;
}
}
第四題
dp[i][j]表示第i步位於下標爲j的方案數,直接轉移即可。
public class Solution {
public static final int Mod=(int) (1e9+7);
public int numWays(int sum, int n) {
n=Math.min(n, sum);
int[][] dp=new int[sum+1][n+1]; //dp[i][j] 表示第i步位於j的方案數
dp[0][0]=1;
for(int i=1;i<dp.length;i++) {
for(int j=0;j<=n;j++) {
dp[i][j]=(dp[i][j]+dp[i-1][j])%Mod;
if(j-1>=0)
dp[i][j]=(dp[i][j]+dp[i-1][j-1])%Mod;
if(j+1<n)
dp[i][j]=(dp[i][j]+dp[i-1][j+1])%Mod;
}
}
return dp[sum][0];
}
}