和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

java.lang.OutOfMemoryError: Java heap space

记录一次OOM。
具体代码如下

package com.klaus.array.prob17;

import org.junit.Test;

public class Solution {
    // 没考虑大数情况
    // public int[] printNumbers(int n) {
    //     int end = (int)Math.pow(10, n) - 1;
    //     int[] res = new int[end];
    //     for(int i = 0; i < end; i++)
    //         res[i] = i + 1;
    //     return res;
    // }

    // 考虑大数
    StringBuilder res = new StringBuilder();
    int _n;
    char[] num, loop = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

    public String printNumbers(int n) {
        _n = n;
        num = new char[n];


        dfs(0);

        res.deleteCharAt(res.length() - 1);
        return res.toString();
    }

    void dfs(int x) {
        if (x == _n) {
            res.append(String.valueOf(num)).append(",");
            return;
        }

        for (char i : loop) {
            num[x] = i;
            dfs(x + 1);
        }
    }


    @Test
    public void test() {
        System.out.println(printNumbers(30));
    }
}

原因就是StringBuilder对象在运行中每次都比上一次大一倍,太大了,堆内存不够存放导致了堆溢出

posted @ 2021-10-04 11:39  klaus08  阅读(32)  评论(0编辑  收藏  举报