第四章:多维数组和矩阵 ------------- 4.4 找出边界为1的最大子方阵

边界为1的最大子方阵 给定一个NxN的矩阵matrix,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的变成长度 例如 : {0,1,1,1,1}, {0,1,0,0,1}, {0,1,0,0,1}, {0,1,1,1,1}, {0,1,0,1,1} 其中边框全是1的最大正方形的大小4*4 返回4 思路如下,先建立一个三维辅助数组,第一第二位存放矩阵的行和列的下标,第三位0时,存放 当前位置向右连续共有... 阅读详情

找出边界为1的最大子方阵:

1、未优化的题解:(复杂度较高)

//伪代码
max(A,N){
	int n=N;
	while(n>0){
		for(i from 0 to N-1){
			if(i+n>N) break;
			
			l3: 
			for(j from 0 to N-1){
				if(j+n>N) break; 
				
				//i,j就是顶点
				r=i;
				c=j;
				
				//上面的边 
				while(c<j+n){
					if(A[r][c]==0) continue l3;
					c++;
				}
				c--;
				//右边的边 
				while(r<i+n){
					if(A[r][c]==0) continue l3;
					r++;
				} 
				r--;
				//下边的边
				while(c>=j){
					if(A[r][c]==0) continue l3;
					c--;
				} 
				c++;
				//左边的边
				while(r>=i){
					if(A[r][c]==0) continue l3;
					r--;
				} 
				//r++;--------- 无需恢复 
				return n;
			}	 	
		}		
		n--;
	}
	return 0;
}

代码:

#include<iostream>
#include<vector>
using namespace std;

int solve(vector<vector<int> > A){
	int N=A.size();
	int n=N;
	while(n>0)
	{
		for(int i=0;i<N;i++)
		{
			if(i+n>N) break;			
			//第二层循环: 
			int j=0;
			l3:
			while(j++<N){
				if(j+n>N) break; 
				
				//检查四条边 
				
				//i,j就是顶点
				int r=i,c=j;
				
				//上面的边 
				while(c<j+n)
				{
					if(A[r][c++]==0) goto l3;
				}
				c--;
				//右边的边 
				while(r<i+n)
				{
					if(A[r++][c]==0) goto l3;
				} 
				r--;
				//下边的边
				while(c>=j)
				{
					if(A[r][c--]==0) goto l3;
				} 
				c++;
				//左边的边
				while(r>=i)
				{
					if(A[r--][c]==0) goto l3;
				} 
				//r++;--------- 无需恢复 
				return n;				
			}				
		}		
		n--;
	}
	return 0;
}


int main()
{
	vector<vector<int> > arr;
	int row=5,col=5;
	//二维向量赋初值 
	int i=0,j=0;
	//赋初值 
	vector<int> temp;
	//第一行 
	temp.push_back(0);
	temp.push_back(1);
	temp.push_back(1);
	temp.push_back(1);
	temp.push_back(1);
	arr.push_back(temp);
	temp.clear();
	//第二行 
	temp.push_back(0);
	temp.push_back(1);
	temp.push_back(0);
	temp.push_back(1);
	temp.push_back(0);
	arr.push_back(temp);
	temp.clear();
	//第三行 
	temp.push_back(0);
	temp.push_back(1);
	temp.push_back(1);
	temp.push_back(1);
	temp.push_back(1);
	arr.push_back(temp);
	temp.clear();
	//第四行 
	temp.push_back(0);
	temp.push_back(1);
	temp.push_back(1);
	temp.push_back(1);
	temp.push_back(1);
	arr.push_back(temp);
	temp.clear();
	//第五行 
	temp.push_back(0);
	temp.push_back(1);
	temp.push_back(0);
	temp.push_back(1);
	temp.push_back(1);
	arr.push_back(temp);
	temp.clear();
	
	//打印二维向量	
	for(int i=0;i<row;i++)
	{
		for(int j=0;j<col;j++)
		{
			cout<<arr[i][j]<<" ";		
		}		
		cout<<endl;
	}	
	cout<<endl;
	
	cout<<solve(arr);
	return 0; 
} 

continue:结束本次循环,不执行循环体内continue下面的语句,继续下次循环。

break:终止整个循环体,无论多少层。

goto:与标志联用,容易造成程序的混乱。 

 结果:

2、边界为1的最大子方阵优化:

①、可以通过对原有矩阵进行预处理的方式,这个思路类似于动态规划中的打表法。

②、我们可以构建一个三维数组,二维平面空间和矩阵大小相同,第三维存储两个元素,第一个元素存储包括自己以及自

己右方连续的1的个数,如果自己为0,那么自己就存储为0。第二个元素存储包括自己以及自己下方连续的1的个数,如果

自己为0,那么自己也存储为0。

③、通过生成这个辅助表,就可以在判断是否是最大方阵的时候加快判断速度,可以将4个while循环去除,而通过这个辅助

表只需判断一次即可,时间复杂度为O(1),那么整个算法的时间复杂度就为N*N*N了,为O(N3)。

假如矩阵为:
-----------------------------
{ 1, 1, 0, 1 }
{ 1, 1, 1, 1 }
{ 1, 1, 0, 1 }
{ 1, 1, 1, 1 }
-----------------------------
生成的辅助数组为:
-----------------------------
2,4    1,4    0,0    1,4    
4,3    3,3    2,1    1,3    
2,2    1,2    0,0    1,2    
4,1    3,1    2,1    1,1    
----------------------------- 

代码: 

public class MaxSquare_1 {
    public static void main(String[] args) {
//        int[][] A = { 
//                { 0, 1, 1, 1, 1 },
//                { 0, 1, 0, 1, 0 }, 
//                { 0, 1, 1, 1, 1 }, 
//                { 0, 1, 1, 1, 1 }, 
//                { 0, 1, 0, 1, 1 } 
//            };
        int [][]A = new int[][] { 
            { 1, 1, 0, 1 },
            { 1, 1, 1, 1 }, 
            { 1, 1, 0, 1 }, 
            { 1, 1, 1, 1 }, 
        };
        generateHelpRec(A);
        System.out.println("生成的辅助数组为:");
        System.out.println("=============================");
        print(rec, A.length);
        System.out.println("=============================");
        System.out.println("最大子方阵的边长为:"+solve(A));
    }
    
    private static void print(int[][][] rec, int N) {
        for (int i = 0; i < N; i++) {
          for (int j = 0; j < N; j++) {
            System.out.print(rec[i][j][0] + "," + rec[i][j][1] + "\t");
          }
          System.out.println();
        }
      }
    
    static int [][][]rec;
    /**
     * 记录每个元素往右和往下有多少个连续的1
     * @param A
     */
    private static void generateHelpRec(int[][] A) {
        int N = A.length;
        rec = new int[N][N][2];
        int row = N-1;
        // 初始化最后一行,因为记录的是往右和往下的,所以必须从最后一行向上初始化,而且从右向左初始化
        for(int j=N-1;j>=0;j--){
            int value = A[row][j];
            if (value==1) {
                if (j==N-1) { // 避免数组越界
                    rec[row][j][0] = 1; // 右边界
                }else {
                    // A的元素值为1,rec在这个位置的连续1的个数 = 右边位置的连续的1的个数+1
                    rec[row][j][0] = rec[row][j+1][0] + 1;
                }
                // 最后一行的下方的1的连续数==1
                rec[row][j][1] = 1;
            }
        }
        row--; //开始初始化倒数第二行到第一行
        for(int i = row;i>=0;i--){
            for (int j = N-1; j>=0; j--) {
                int value = A[i][j];
                // 利用右边和下边已经生产的数据来推出现在这个位置上右侧和下方有多少个1
                if(value==1){
                    if (j==N-1) {
                        rec[i][j][0] = 1;// 右侧连续1的个数
                    }else {
                        rec[i][j][0] = rec[i][j+1][0]+1;
                    }
                    
                    rec[i][j][1] = rec[i+1][j][1] + 1; // 向下连续1的个数
                }
            }
        }
    }

    // O(n3)
    static int solve(int [][]A){
        int N = A.length;
        int n = N;
        while(n>0){
            for (int i = 0; i < N; i++) {
                if (i+n>N) break;
                l3:  // 这个语言相当于给第二层for循环命令  下面代码中的continue继续的是第二层的for循环,不是while循环
                for (int j = 0; j < N; j++) {
                    if (j+n>N) break;
                    if (check(i, j, n))
                        return n;
                }
            }
            n--;
        }
        return 0;
    }

    // O(1)
    private static boolean check(int i, int j, int n) {
        // 左上角那个点往右数的1的数目要大于等于n
        // 左上角那个点往下数的1的数目要大于等于n
        // 右上角那个点往下数的1的个数要大于等于n
        // 左下角那个点往右数的1的个数要大于等于n
        if (rec[i][j][0]>=n&&rec[i][j][1]>=n&&rec[i][j+n-1][1]>=n&&rec[i+n-1][j][0]>=n) {
            return true;
        }
        return false;
    }
    
    
}

结果:

小结:

计算优化过后的时间复杂度为: 生成辅助数组所花时间N2+后面循环遍历时间N3,加起来整个算法的时间复杂度就

为O(N3)了,那这个算法的效率就比优化前的算法的效率好太多了。 

第二种方法转自:https://www.cnblogs.com/xiaoyh/p/10293686.html 

紫光同创PDS软件操作指南:如何为FPGA新增自定义Flash型号 本文详细介绍了在紫光同创PDS软件中为FPGA新增自定义Flash型号的完整操作指南。针对官方支持列表之外的SPI Flash芯片,文章从理解FPGA配置逻辑入手,逐步讲解如何通过扫描Flash ID、在Flash Operator中精准填写参数、转换.sbit文件,最终完成固化的全过程,并分享了高级技巧与常见问题排查方法,帮助工程师摆脱对预设型号的依赖,实现灵活选型。 阅读详情

相关推荐

DrMOS电路仿真

将驱动电路与功率MOS集成化后既是DrMOS。把驱动芯片以及上下桥MOSFET封装在一起,这样每一相供电就有了单独的驱动芯片,并且这种高度整合的MOSFET可以通过更高的电流、发热比传统的MOSFET也小很多且更节能 自举升压同步BUCK高低侧栅驱动电路原理及仿真 ...

Srambler的博客 5041

找出边界为1的最大子矩阵

题目如下: 给定一个N*N的矩阵,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度 例如: {0,1,1,1,1}, {0,1,0,0,1}, {0,1,0,0,1}, {0,1,1,1,1}, {0,1,0,1,1}, 其中 ,边框全是1的最大正方形的大小是4*4, 返回4。 输入在第一行给出一个N,代表这个矩阵的边长,随后给出N行,每行给出N个数组成该矩阵。 输出在一行给出边框全是1的最大正方形的边长长度。 思路: 首先考虑遍历二维数组爆搜。 列举每一个坐标点(时间复杂

weixin_54802873的博客 429

别再卡在Google验证了!用Header Editor插件5分钟搞定TryHackMe注册(附最新.json规则)

本文提供了使用Header Editor插件快速解决TryHackMe注册时Google验证失败问题的详细指南。通过导入特定的JSON规则文件,用户可以轻松绕过网络限制,5分钟内完成账号注册,无需复杂设置。文章包含完整的配置步骤、常见问题解决方案以及安全使用建议。

weixin_30736301的博客 466

边界为1的最大子方阵(模拟+动态规划)

分析:这里不使用直接暴力枚举的方法,而是使用最大最先算的最优算法。这里的思考方式值得学习。 方法一:使用模拟的方法,模拟寻找过程(从大到小顺序查找,找到就停止) public class Main { public static int a[][] = { {1,1,1,1,1,1}, {1,0,0,0,1,1}, {1,0,0,0,1,1}, {1,0,0,0,1,...

qq_42794545的博客 680

AISHELL-1中文语音数据集实战:从下载到训练你的第一个ASR模型(附完整代码)

本文详细介绍了如何使用AISHELL-1中文语音数据集从数据准备到训练端到端语音识别模型的全流程。AISHELL-1作为国内首个开源的普通话语音数据集,包含178小时高质量录音,适合中文自动语音识别(ASR)系统开发。文章涵盖数据下载、预处理、Conformer-CTC模型训练、评估及优化策略,并附完整代码实现。

garlic的博客 1121

微信小程序云开发订单微信支付与小票和标签打印的完整高效流程

本片文章全文12000字,细致讲述从申请账户到小程序注册到打印机的选型最后到实现微信小程序云开发订单支付更新与小票,标签打印完整的高效流程。客户A在我们的点餐平台上点了一杯咖啡,所以客户要在选好后付款,在付款完成后商家的小票打印机和标签打印机打印出本订单的相关信息。

weixin_52312427的博客 3649

找到边界为1的最大子方阵

package 算法; public class 找到边界为1的最大子方阵 { public static void main(String[] args) { int[][] A={ {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {

小小雨伞的博客 230

05 - GRACE数据处理-球谐展开与球谐综合

GRACE数据处理-球谐展开和综合前面在介绍GRACE相关理论的时候提到过下面的公式,从公式形式上可以看出,面密度变化和球谐系数(CS)之间是能够相互转换的,那这个转化的过程可以称为球谐展开,简单理解就是将全球网格数据转化为球谐系数的过程。而球谐综合可以看作是球谐展开的逆过程,利用球谐系数计算到全球格网分布。

weixin_43339605的博客 1050

[编程题]最大子方阵

有一个方阵,其中每个单元(像素)非黑即白(非0即1),请设计一个高效算法,找到四条边颜色相同的最大子方阵。 给定一个01方阵mat,同时给定方阵的边长n,请返回最大子方阵的边长。保证方阵边长小于等于100。 测试样例: [[1,1,1],[1,0,1],[1,1,1]],3 返回:3 class SubMatrix { public:     int maxSubMatrix

烟雨流年 1659

在jetson上对fastdeploy进行源码编译(完整版)

在大多数Linux发行版中,你可以使用包管理器安装Python开发包。根据jetpack的版本选择对应的推理库版本。在~/.bashrc中写入这三行。

如果想成为中心,那么就到中心去吧。 678

Pinocchio 快速详细入门教程 —— 开源机器人运动学动力学库

本文介绍了机器人学中的数字机器人学、正逆运动学、动力学仿真与控制、最优控制等核心主题,以及Pinocchio库的应用。内容包括: 数字机器人学:通过UR5机器人模型演示了构型空间采样、碰撞检测、路径规划等基础操作,使用优化方法在约束条件下寻找有效构型。 运动学:详细讲解了二维和三维机器人的正运动学(构型到末端位置)和逆运动学(目标位置到构型),包括串联机械臂和并联机器人的处理。 动力学与控制:介绍了动力学仿真(如自由落体、摩擦效应)、PD控制、计算扭矩控制,以及接触仿真(碰撞检测与处理)。 最优控制:以独轮

机器人控制与仿真应用 2883

算法很美 笔记 4.多维数组与矩阵

4.多维数组与矩阵 题1 :顺时针打印二维数组 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9...

xcsxchen 997

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

四、多维数组_03 &边界为1的最大子方阵_普通版(笔记)

import java.util.Scanner; public class A020_边界为1的最大子方阵 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = 6; int n = 6; int[][] arr = new int[m][n]; ...

oQQSanGuo的博客 237

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

多维数组和矩阵----边界为1的最大子方阵

题目:给定一个N*N的矩阵matrix,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度,例如: {0, 1, 1, 1, 1}, {0, 1, 0, 0, 1}, {0, 1, 0, 0, 1}, {0, 1, 1, 1, 1}, {0, 1, 0, 1, 1}  其中,边框全是1的最大正方形的大小是4*4,返回4 思路:直接枚举,根据阶数递...

weixin_30386713的博客 213

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

多维数组和矩阵的基础题型

本文主要介绍关于多维数组和矩阵的题型,从基础开始逐步深入。 一、顺时针打印矩阵 如下图: 解题方法:把矩阵分解为多个矩形框,从最外层开始打印,每次循环打印一个矩形框,一个循环里用四个while循环打印,每个while循环打印一个矩形的一条边。(用矩阵框的两个顶点进行循环的控制,当左上角的行号小于右下角的行号就退出外层循环) 代码如下: public class 顺时针打印矩阵 { public...

覃会程的博客 1310

【算法很美】多维数组与矩阵

多维数组与矩阵1. 多维数组基础题● 顺时针打印二维数组● 零所在行列清零● Z字型打印矩阵2. 复杂解● 边界为1的最大字方阵● 编程返回子数组最大累加和● 求子矩阵最大累加和● 矩阵运算一、矩阵的加法与减法二、矩阵与数的乘法三、矩阵与矩阵的乘法 1. 多维数组基础题 ● 顺时针打印二维数组 一圈一圈的打印,每圈以 每圈左上角坐标和右下角坐标 为边界。 public static void print(int[][] matrix) { int leftUpRow = 0, leftUpCo

weixin_48434658的博客 724

第四章 多维数组与矩阵

1、顺时针打印二维数组 package org.lanqiao.algo.elementary._04matrix; /** * 顺时针打印二维数组 输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 输出 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 */ public class Case...

h_666666的博客 377

多维数组和矩阵程序练习

顺时针打印二维数组: 题目: 顺时针打印二维数组。 例如:将如下数组: {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}} 输出为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 思路: 可以先一圈一圈的打印。先打印外圈,再缩小边界范围循环打印内圈即可。打印的时候注意控制边界。 代码...

曹世宏的博客 825

Java算法--第四章--多维数组和矩阵(4)题目:边界为1的最大子方阵

Java算法–第四章–多维数组和矩阵(4)题目:边界为1的最大子方阵 给定一个N×N的矩阵matrix,在这个矩阵中,只有O和1两种值,返回边框全是1的最大正方形的边长长度。 例如∶ {0,1,1,1,1}, {0,1,0,0,1}, {0,1,0,0,1}, {0,1,1,1,1}, {0,1,0,1,1} 其中,边框全是1的最大正方形的大小是4*4,返回4 代码: package matrix; public class MaxSquare { public static void main(Str

wp_886的博客 439

[算法系列] 多维数组--超详细解答!!记几道经典的多维数组习题(顺时针打印矩阵,z字型打印矩阵等)

[算法系列] 多维数组–记几道经典的多维数组习题 1. 顺时针打印二维数组 传入一个二维数组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 顺时针打印出: 1 2 3 4 8 12 16 15 14 13 9 5 6 7 8 12 11 10 分析: 有如下二维数组, 那么它具体打印顺序是像右面这样的: 按照 1…5...

lawfree的博客 3388

多维数组与矩阵

【问题描述】给定一个数组arr ,返回子数组的最大累加和,例: arr=[1,-2,3,5,-2,6,-1]所有的子数组中[3,5,-2,6]可以累加出最大的和12 ,所以返回12。【优化】预处理,复制一份空的与原矩阵阶数相同的矩阵,记录其右和下(包含他自己的1的个数),只检测4个数就行,三维数组。【问题描述】给定一个NxN的矩阵matrix,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度。【问题描述】给定一个矩阵matrix ,其中的值有正、有负、有0 ,返回子矩阵的最大累加和。

Xpy_021101的博客 202

蓝桥杯算法课《算法最美》笔记——4.多维数组和矩阵

4. 多维数组基础题 4.1 顺时针打印二维数组 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16] 打印1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 思路:一圈一圈的打印。 import java.util.ArrayList; import java.util.Arrays; public class 顺时针打印2维数组 { public static void m

m0_55846001的博客 316

题4:边界为一的最大子方阵

题目: 给定一个N×N的矩阵matrix,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度。 思路: 借助一个同样大小的三维数组,从右下角记录元素右边1的个数和左边1的个数 时间复杂度由O(N的四次方)降低到O(N的立方) package 多维数组与矩阵; public class case04_边界为1的最大子方阵 { public static void main(String[] args) { int[][] A=new int[][]{

m0_66279156的博客 166

算法很美之多维数组和矩阵

第四篇 多维数组和矩阵 题目:Exam18_TransformMatrix 描述 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。 注意:不要使用缓存矩阵 输入 第一行包含一个整数N。(...

xd-cy的博客 441

数据结构复习之多维数组与矩阵

多维数组与矩阵知识点多维数组和运算定义顺序存储二维存储位置计算三维数组存储位置数组转换置算法实现矩阵的压缩存储对称矩阵三角矩阵稀疏矩阵三元组表来存储稀疏实例一般㔹置算法快速转置算示带行表的三元组表 一种比特殊的数据结构。 知识点 多维数组和运算 定义 1、一维数组 是一种元素个数固定的线性表。 2、多维数组 是一种复杂的数据结构,可以看成是线性表的推广,一个n维数组可视为其数据元素为n-1维数组的线性表。 顺序存储 二维数组可有两种存储方法:一种是以行序为主序的存储方式,另一种是以列序为主序的存储方式。在C

guangod的博客 2048

蓝桥杯《算法很美》第四章 多维数组和矩阵

【1】顺时针打印二维数组 #include &lt;iostream&gt; #include &lt;iomanip&gt; #define MAX 10 /** 回型打印N行M列矩阵 通过不断定位“口”字的左上角和右下角 先打印一圈,再找到重新定位左上角和右下角的规律 */ void Print_arr(int A[MAX][MAX], int N, int M){...

Show me CODE 359
上一篇: continue、break与goto
下一篇: 第四章:多维数组和矩阵 ------------- 4.7 子数组最大累加和
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值