Your browser is not supported. Please, update your browser or switch to a different one. Learn more about which browsers are supported.
Task description
You are given a matrix A consisting of N rows and M columns, where each cell contains a digit. Your task is to find a continuous sequence of neighbouring cells, starting in the top-left corner and ending in the bottom-right corner (going only down and right), that creates the biggest possible integer by concatenation of digits on the path. By neighbouring cells we mean cells that have exactly one common side.
Write a function:
class Solution { public String solution(int[][] A); }
that, given matrix A consisting of N rows and M columns, returns a string which represents the sequence of cells that we should pick to obtain the biggest possible integer.
For example, given the following matrix A:
the function should return "997952", because you can obtain such a sequence by choosing a path as shown below:
Write an efficient algorithm for the following assumptions:
- N and M are integers within the range [1..1,000];
- each element of matrix A is an integer within the range [1..9].
Task timeline
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
}
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff()
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A)
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,)
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.le)
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.le,A[0].length)
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length)
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
Solution.java:10: error: ';' expected return ff(A,0,0,A.length,A[0].length) ^ 1 error
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at Solution.ff(Solution.java:17) at Solution.ff(Solution.java:18) at Solution.ff(Solution.java:20) at Solution.ff(Solution.java:18) at Solution.ff(Solution.java:22) at Solution.solution(Solution.java:10) at Exec.run(exec.java:48) at Exec.main(exec.java:34)
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.length() > p2.length()) {
return String.valueOf(A[i][j]) + p1;
} else if (p2.length() > p1.length()) {
return String.valueOf(A[i][j]) + p2;
} else if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.length() > p2.length()) {
return String.valueOf(A[i][j]) + p1;
} else if (p2.length() > p1.length()) {
return String.valueOf(A[i][j]) + p2;
} else if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
Solution.java:34: error: reached end of file while parsing } ^ 1 error
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.length() > p2.length()) {
return String.valueOf(A[i][j]) + p1;
} else if (p2.length() > p1.length()) {
return String.valueOf(A[i][j]) + p2;
} else if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 || A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 || A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.length() > p2.length()) {
return String.valueOf(A[i][j]) + p1;
} else if (p2.length() > p1.length()) {
return String.valueOf(A[i][j]) + p2;
} else if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at Solution.ff(Solution.java:17) at Solution.ff(Solution.java:18) at Solution.ff(Solution.java:20) at Solution.ff(Solution.java:18) at Solution.ff(Solution.java:22) at Solution.solution(Solution.java:10) at Exec.run(exec.java:48) at Exec.main(exec.java:34)
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 ) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 ) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else if (A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.length() > p2.length()) {
return String.valueOf(A[i][j]) + p1;
} else if (p2.length() > p1.length()) {
return String.valueOf(A[i][j]) + p2;
} else if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 ) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 ) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else if (A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.length() > p2.length()) {
return String.valueOf(A[i][j]) + p1;
} else if (p2.length() > p1.length()) {
return String.valueOf(A[i][j]) + p2;
} else if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 ) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 ) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else if (A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.length() > p2.length()) {
return String.valueOf(A[i][j]) + p1;
} else if (p2.length() > p1.length()) {
return String.valueOf(A[i][j]) + p2;
} else if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public String solution(int[][] A) {
// write your code in Java SE 8
return ff(A,0,0,A.length,A[0].length);
}
public String ff(int A[][], int i, int j, int n, int m) {
if (i >= n || j >= m) {
return "";
} else if (i == n - 1 && j == m - 1) {
return String.valueOf(A[i][j]);
} else if (i == n - 1 ) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (j == m - 1 ) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else if (A[i][j + 1] > A[i + 1][j]) {
return String.valueOf(A[i][j]) + ff(A, i, j + 1, n, m);
} else if (A[i + 1][j] > A[i][j + 1]) {
return String.valueOf(A[i][j]) + ff(A, i + 1, j, n, m);
} else {
String p1 = ff(A, i + 1, j, n, m);
String p2 = ff(A, i, j + 1, n, m);
if (p1.length() > p2.length()) {
return String.valueOf(A[i][j]) + p1;
} else if (p2.length() > p1.length()) {
return String.valueOf(A[i][j]) + p2;
} else if (p1.compareTo(p2) < 0) {
return String.valueOf(A[i][j]) + p2;
} else {
return String.valueOf(A[i][j]) + p1;
}
}
}
}
The following issues have been detected: timeout errors.