LeetCode 68题
刚刚开始写题目的时候写的这道题,这道题debug可费劲了。
贪心算法
class Solution {
StringBuilder sb = new StringBuilder();
List<String> resList = new ArrayList<String>();
public List<String> fullJustify(String[] words, int maxWidth) {
int curlen = 0;
int count = 0;
int blank = 0;
int num = 0;
int moreBlank = 0;
for (int i = 0; i < words.length; i++) {
curlen += words[i].length();
count++;
if (curlen + count - 1< maxWidth) {
if (i == (words.length - 1)) {
if (count == 1) {
blank = maxWidth - curlen;
sb.append(words[i]);
for (int m = 0; m < blank; m++) {
sb.append(" ");
}
resList.add(sb.toString());
sb.delete(0, sb.length());
} else {
blank = maxWidth - curlen;
num = blank / (count - 1);
moreBlank = blank % (count - 1);
for (int k = 0; k < count; k++) {
sb.append(words[i + 1 - count + k]);
sb.append(" ");
}
sb.delete(sb.length() - 1, sb.length());
for (int m = 0; m < blank - count + 1; m++) {
sb.append(" ");
}
resList.add(sb.toString());
}
}
} else if (curlen + count - 1 == maxWidth) {
for (int j = 0; j < count; j++) {
sb.append(words[i - count + 1 + j]);
if(j != count - 1) {
sb.append(" ");
}
}
resList.add(sb.toString());
sb.delete(0, sb.length());
curlen = 0;
count = 0;
} else {
curlen -= words[i].length();
count--;
blank = maxWidth - curlen;
if (count == 1) {
blank = maxWidth - curlen;
sb.append(words[i - 1]);
for (int m = 0; m < blank; m++) {
sb.append(" ");
}
resList.add(sb.toString());
sb.delete(0, sb.length());
curlen = words[i].length();
count = 1;
if (i == (words.length - 1)) {
if (count == 1) {
blank = maxWidth - curlen;
sb.append(words[i]);
for (int m = 0; m < blank; m++) {
sb.append(" ");
}
resList.add(sb.toString());
sb.delete(0, sb.length());
} else {
blank = maxWidth - curlen;
num = blank / (count - 1);
moreBlank = blank % (count - 1);
for (int k = 0; k < count; k++) {
sb.append(words[i + 1 - count + k]);
}
sb.delete(sb.length() - 1, sb.length());
for (int m = 0; m < blank - count + 1; m++) {
sb.append(" ");
}
resList.add(sb.toString());
}
}
continue;
}
if (blank % (count - 1) == 0) {
num = blank / (count - 1);
for (int k = 0; k < count; k++) {
sb.append(words[i - count + k]);
if (k != count - 1) {
for (int m = 0; m < num; m++) {
sb.append(" ");
}
}
}
resList.add(sb.toString());
sb.delete(0, sb.length());
} else {
num = blank / (count - 1);
moreBlank = blank % (count - 1);
for (int k = 0; k < count; k++) {
sb.append(words[i - count + k]);
if (k != count - 1) {
for (int m = 0; m < num; m++) {
sb.append(" ");
}
}
if (moreBlank > 0) {
sb.append(" ");
moreBlank--;
}
}
resList.add(sb.toString());
sb.delete(0, sb.length());
}
count = 0;
count++;
curlen = words[i].length();
if (i == (words.length - 1)) {
if (count == 1) {
blank = maxWidth - curlen;
sb.append(words[i]);
for (int m = 0; m < blank; m++) {
sb.append(" ");
}
resList.add(sb.toString());
sb.delete(0, sb.length());
} else {
blank = maxWidth - curlen;
num = blank / (count - 1);
moreBlank = blank % (count - 1);
for (int k = 0; k < count; k++) {
sb.append(words[i + 1 - count + k]);
}
sb.delete(sb.length() - 1, sb.length());
for (int m = 0; m < blank - count + 1; m++) {
sb.append(" ");
}
resList.add(sb.toString());
}
}
}
}
return resList;
}
}