import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main{
public static void main(String[] args) throws IOException {
// true
int[][] testData1 = {
{1, 1, 1, 1},
{1, 1, 1, 1},
{1, 1, 1, 1},
{1, 1, 1, 1}
};
// false
int[][] testData2 = {
{1, 1, 1, 1},
{1, 0, 0, 1},
{1, 0, 0, 1},
{1, 1, 1, 1}
};
// true
int[][] testData3 = {
{0, 0, 1, 1},
{0, 0, 1, 1},
{1, 1, 0, 0},
{1, 1, 0, 0}
};
// false
int[][] testData4 = {
{0, 0, 1, 1},
{0, 0, 1, 1},
{0, 1, 0, 0},
{1, 1, 0, 0}
};
// true
System.out.println(findSquare(4, testData1));
// false
System.out.println(findSquare(4, testData2));
// true
System.out.println(findSquare(4, testData3));
// false
System.out.println(findSquare(4, testData4));
}
private static boolean findSquare(int n, int[][] data) {
boolean flag = false;
int totalCount = 0;
List<Map<Integer, Integer>> dataXY = new ArrayList<Map<Integer, Integer>>(); //保存统计过的1的位置
if(data != null || data.length != 0){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(data[i][j] == 1){
totalCount++;
}
}
}
if(totalCount == 0){
return false;
}else if(totalCount == n*n){
return true;
}else{
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
boolean isFindSquare = false;
int count1 = 0;
int count2 = 0;
if(data[i][j] == 1){
for(int u = 0; u < dataXY.size(); u++){
if(dataXY.get(u).get(j) != null && dataXY.get(u).get(j) == i){
isFindSquare = true;
}
}
}
if(data[i][j] == 1 && !isFindSquare){
for(int a = i; a < n; a++){
if(data[a][j] == 1){
count1++;
}else{
break;
}
}
for(int b = j; b < n; b++){
if(data[i][b] == 1){
count2++;
}else{
break;
}
}
if(count1 == count2){
boolean tempFlag=true;
for(int x = i; x < i+count1; x++){
for(int y = j;y < j+count2; y++){
if(data[x][y] == 0){
return false;
}else{
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(y, x);
dataXY.add(map);
}
}
}
flag = tempFlag;
}else{
return false;
}
}
}
}
}
}
return flag;
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main{
public static void main(String[] args) throws IOException {
// true
int[][] testData1 = {
{1, 1, 1, 1},
{1, 1, 1, 1},
{1, 1, 1, 1},
{1, 1, 1, 1}
};
// false
int[][] testData2 = {
{1, 1, 1, 1},
{1, 0, 0, 1},
{1, 0, 0, 1},
{1, 1, 1, 1}
};
// true
int[][] testData3 = {
{0, 0, 1, 1},
{0, 0, 1, 1},
{1, 1, 0, 0},
{1, 1, 0, 0}
};
// false
int[][] testData4 = {
{0, 0, 1, 1},
{0, 0, 1, 1},
{0, 1, 0, 0},
{1, 1, 0, 0}
};
// true
System.out.println(findSquare(4, testData1));
// false
System.out.println(findSquare(4, testData2));
// true
System.out.println(findSquare(4, testData3));
// false
System.out.println(findSquare(4, testData4));
}
private static boolean findSquare(int n, int[][] data) {
boolean flag = false;
int totalCount = 0;
List<Map<Integer, Integer>> dataXY = new ArrayList<Map<Integer, Integer>>(); //保存统计过的1的位置
if(data != null || data.length != 0){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(data[i][j] == 1){
totalCount++;
}
}
}
if(totalCount == 0){
return false;
}else if(totalCount == n*n){
return true;
}else{
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
boolean isFindSquare = false;
int count1 = 0;
int count2 = 0;
if(data[i][j] == 1){
for(int u = 0; u < dataXY.size(); u++){
if(dataXY.get(u).get(j) != null && dataXY.get(u).get(j) == i){
isFindSquare = true;
}
}
}
if(data[i][j] == 1 && !isFindSquare){
for(int a = i; a < n; a++){
if(data[a][j] == 1){
count1++;
}else{
break;
}
}
for(int b = j; b < n; b++){
if(data[i][b] == 1){
count2++;
}else{
break;
}
}
if(count1 == count2){
boolean tempFlag=true;
for(int x = i; x < i+count1; x++){
for(int y = j;y < j+count2; y++){
if(data[x][y] == 0){
return false;
}else{
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(y, x);
dataXY.add(map);
}
}
}
flag = tempFlag;
}else{
return false;
}
}
}
}
}
}
return flag;
}
}
1101

被折叠的 条评论
为什么被折叠?



