【LeetCode - 251】展开二维向量

文章目录

  • 1、题目描述
  • 2、解题思路
  • 3、解题代码

1、题目描述

【LeetCode - 251】展开二维向量_第1张图片

2、解题思路

  定义两个索引变量 outer 和 inner,分别变量外层和内层。

  hasNext:如果 inner 超出边界,则 inner 置为 0,且 outer ++。如果 outer 超出边界,则没有元素了。

  next:如果 hasNext 为 true,则获取元素,且 inner++。如果为 false,因为题目没明确说明此时的处理,于是我们可以直接抛出一个 NoSuchElementException 异常。

3、解题代码

import java.util.NoSuchElementException;

class Vector2D {
    private int[][] vector;
    private int inner = 0;  // 内索引
    private int outer = 0;  // 外索引

    public Vector2D(int[][] v) {
        vector = v;
    }

    public int next() {
        if (!hasNext()) throw new NoSuchElementException();
        return vector[outer][inner++];
    }

    public boolean hasNext() {
        // outer 没超出边界,且 inner 超出了边界
        while (outer < vector.length && inner == vector[outer].length) {
            inner = 0;  // 更新内索引为开始
            outer++;    // 遍历下一个一维数组
        }
        // 跳出 while 循环,要么 outer 超出边界,要么 inner 没超出索引
        return outer < vector.length;   // 如果 outer 超出边界,则没有数据了
    }
}

/**
 * Your Vector2D object will be instantiated and called as such:
 * Vector2D obj = new Vector2D(v);
 * int param_1 = obj.next();
 * boolean param_2 = obj.hasNext();
 */

你可能感兴趣的:(LeetCode刷题记录,leetcode,java)