- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的矩阵:
{
{4,5,6,7,8},
{2,3,1,4},
{1,2},
{1,2,3,4,5}
{5,6,7,8}
}
我想以螺旋方式打印它,所以输出应该是:4 5 6 7 8 4 2 5 8 7 6 5 1 1 1 3 1 4 3 2
我目前的螺旋矩阵代码如下:
void spiral(int a[][]) {
int i, k = 0, l = 0, m = a.length, n = a[0].length;
while (k < m && l < n) {
for (i = l; i < n; ++i) {
System.out.print(a[k][i] + " ");
}
k++;
for (i = k; i < m; ++i) {
System.out.print(a[i][n - 1] + " ");
}
n--;
if (k < m) {
for (i = n - 1; i >= l; --i) {
System.out.print(a[m - 1][i] + " ");
}
m--;
}
if (l < n) {
for (i = m - 1; i >= k; --i) {
System.out.print(a[i][l] + " ");
}
l++;
}
}
问题是我无法理解如何使其适用于不相等的数组长度行。我真的很感激任何帮助和见解。
最佳答案
这是我的解决方案。它可能会更有效,但它确实有效:
public static void main(String [] args) throws ScriptException {
Integer [][] input = new Integer[][] {
{4,5,6,7,8},
{2,3,1,4},
{1,2},
{1,2,3,4,5},
{5,6,7,8}
};
List<List<Integer>> list = listify(input);
processSpiral(list);
}
private static <T> void processSpiral(List<List<T>> list) {
if (!list.isEmpty()) {
printTop(list);
list.removeIf(l -> l.isEmpty());
printLast(list);
list.removeIf(l -> l.isEmpty());
printBottom(list);
list.removeIf(l -> l.isEmpty());
printFirst(list);
list.removeIf(l -> l.isEmpty());
processSpiral(list);
}
}
private static <T> void printFirst(List<List<T>> list) {
if (!list.isEmpty()) {
for (int i = list.size() -1; i >= 0; i --) {
List<T> row = list.get(i);
if (!row.isEmpty()) {
System.out.print(String.format("%s ", row.get(0).toString()));
row.remove(0);
}
}
}
}
private static <T> void printBottom(List<List<T>> list) {
if (!list.isEmpty()) {
List<T> bottomRow = list.get(list.size() - 1);
Collections.reverse(bottomRow);
for (T i : bottomRow) {
System.out.print(String.format("%s ", i.toString()));
}
list.remove(list.size() - 1);
}
}
private static <T> void printLast(List<List<T>> list) {
list.stream()
.filter(l -> !l.isEmpty())
.forEach(l -> {
T i = l.get(l.size() - 1);
System.out.print(String.format("%s ", i.toString()));
l.remove(l.size() - 1);
});
}
private static <T> void printTop(List<List<T>> list) {
List<T> firstRow = list.get(0);
list.remove(0);
//print the first row
for (T i : firstRow) {
System.out.print(String.format("%s ", i.toString()));
}
}
private static <T> List<List<T>> listify(T [][] input) {
//convert to List of List for simplicity's sake
List<List<T>> list = new ArrayList<>();
for (T [] row : input) {
//do not use Arrays.asList() as that creates an immutable List
List<T> l = new ArrayList<>(row.length);
for (T i : row) {
l.add(i);
}
list.add(l);
}
return list;
}
关于java - 如何以螺旋形式打印不等行长度的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60775337/
谁能解释为什么这些 JavaScript 数组不等式比较的计算结果为真? [""] !== [""] [1] !== [1] [] !== [] [""] != [""] [1] != [1] []
好的,所以我一直在努力学习掌握子进程并正确地等待它们完成。我已经阅读了很多 Stack Overflow Q/A,但我似乎仍然无法按照我的意愿让它工作。我一直在阅读/搜索这本书(C++ Primer
根据this , !==! 是不等于字符串运算符。尝试一下,我得到: C:\> if "asdf" !==! "fdas" echo asdf !==! was unexpected at this
这是一道面试题: Suppose: I have 100 trillion elements, each of them has size from 1 byte to 1 trillion byte
如何集成功能 f(y) w.r.t 时间;即 'y'是一个包含 3000 个值和值 time(t) 的数组从 1 到 3000 不等。所以,在整合 f(y) 后我需要 3000 个值. 积分将是不确定
我是一名优秀的程序员,十分优秀!