一、无障碍
public static void main(String[] args) {
int m=6,n=4;
int res=uniquePaths(m,n);
System.out.println(res);
}
public static int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
//初始化
for (int i = 0; i < m; i++) {
dp[i][0] = 1;
}
for (int i = 0; i < n; i++) {
dp[0][i] = 1;
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
二、有障碍
public static void main(String[] args) {
int[][] arr={{0,0,0,1},{0,1,0,0},{0,0,0,0}};
int res=uniquePathsWithObstacles(arr);
System.out.println(res);
}
//求:有几种路线
public static int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
int[] dp = new int[n];
for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) {
dp[j] = 1;
}
for (int i = 1; i < m; i++) {
for (int j = 0; j < n; j++) {
if (obstacleGrid[i][j] == 1) {
dp[j] = 0;
} else if (j != 0) {
dp[j] += dp[j - 1];
}
}
}
return dp[n - 1];
}
三、可达数总和
public static void main(String[] args) {
int m=2,n=3,k=1;
int res=movingCount(m,n,k);
System.out.println(res);
}
public static int movingCount(int m, int n, int k) {
if (k == 0) {
return 1;
}
boolean[][] vis = new boolean[m][n];
int ans = 1;
vis[0][0] = true;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if ((i == 0 && j == 0) || get(i) + get(j) > k) {
continue;
}
// 边界判断
if (i - 1 >= 0) {
vis[i][j] |= vis[i - 1][j];
}
if (j - 1 >= 0) {
vis[i][j] |= vis[i][j - 1];
}
ans += vis[i][j] ? 1 : 0;
}
}
return ans;
}
private static int get(int x) {
int res = 0;
while (x != 0) {
res += x % 10;
x /= 10;
}
return res;
}
输入:
public class 输入一个数组_无括号 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//System.out.println("输入你的数组(以逗号隔开)");
String in = sc.nextLine();
String[] str = in.split(" ");//以空格隔开输入
int[] arr = new int[str.length];
for(int i = 0; i < str.length; i++){
arr[i] = Integer.parseInt(str[i]);
}
System.out.println("你输入的数组是:" + Arrays.toString(arr));
}
}
输入2:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String in = sc.nextLine();
String in2=in.substring(1,in.length()-1);
String[] str = in2.split(" ");//以空格隔开输入
int[] arr = new int[str.length];
for(int i = 0; i < str.length; i++){
arr[i] = Integer.parseInt(str[i]);
}
System.out.println("你输入的数组是:" + Arrays.toString(arr));
}