畫家小Q又開始他的藝術(shù)創(chuàng)作。小Q拿出了一塊有NxM像素格的畫板, 畫板初始狀態(tài)是空白的,用'X'表示。
小Q有他獨(dú)特的繪畫技巧,每次小Q會(huì)選擇一條斜線, 如果斜線的方向形如'/',即斜率為1,小Q會(huì)選擇這條斜線中的一段格子,都涂畫為藍(lán)色,用'B'表示;如果對(duì)角線的方向形如'',即斜率為-1,小Q會(huì)選擇這條斜線中的一段格子,都涂畫為黃色,用'Y'表示。
如果一個(gè)格子既被藍(lán)色涂畫過又被黃色涂畫過,那么這個(gè)格子就會(huì)變成綠色,用'G'表示。
小Q已經(jīng)有想畫出的作品的樣子, 請(qǐng)你幫他計(jì)算一下他最少需要多少次操作完成這幅畫。
每個(gè)輸入包含一個(gè)測(cè)試用例。
每個(gè)測(cè)試用例的第一行包含兩個(gè)正整數(shù)N和M(1 <= N, M <= 50), 表示畫板的長(zhǎng)寬。
接下來的N行包含N個(gè)長(zhǎng)度為M的字符串, 其中包含字符'B','Y','G','X',分別表示藍(lán)色,黃色,綠色,空白。整個(gè)表示小Q要完成的作品。
輸出一個(gè)正整數(shù), 表示小Q最少需要多少次操作完成繪畫。
輸入
4 4
YXXB
XYGX
XBYY
BXXY
輸出
3
說明
XXXX
XXXX
XXXX
XXXX
->
YXXX
XYXX
XXYX
XXXY
->
YXXB
XYBX
XBYX
BXXY
->
YXXB
XYGX
XBYY
BXXY
https://www.nowcoder.com/ques...
牛客網(wǎng)
從(0,0)位置開始遍歷
如果遍歷到(i,j)位置為B——>則繼續(xù)向左下方(i+1,j-1)和右上方(i-1,j+1)
遍歷時(shí),遇到將B置為X,遇到G置為(消除B)置為Y
count++;
如果遍歷到(i,j)位置為Y——>則繼續(xù)向左上方(i-1,j-1)和右下方(i+1,j+1)
遍歷時(shí),遇到將Y置為X,遇到G置為(消除Y)置為B
count++;
如果遍歷到(i,j)位置為G——>則分別執(zhí)行1,2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String tem = scanner.nextLine();
int n = Integer.valueOf(tem.split(" ")[0]);
int m = Integer.valueOf(tem.split(" ")[1]);
char color[][] = new char[n][m];
for (int i = 0; i < n; i++) {
tem = scanner.nextLine();
for (int j = 0; j < tem.length(); j++) {
color[i][j] = tem.charAt(j);
}
}
getMinStep(n, m, color);
scanner.close();
}
private static void getMinStep(int n, int m, char color[][]) {
int step = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (color[i][j] == 'Y') {
dray(i, j, n, m, color);
step++;
} else if (color[i][j] == 'B') {
drab(i, j, n, m, color);
step++;
} else if (color[i][j] == 'G') {
dray(i, j, n, m, color);
step++;
drab(i, j, n, m, color);
step++;
}
}
}
System.out.println(step);
}
private static void dray(int x, int y, int n, int m, char color[][]) {
if (x >= 0 && x < n && y >= 0 && y < m && (color[x][y] == 'Y' || color[x][y] == 'G')) {
if (color[x][y] == 'G') {
color[x][y] = 'B';
} else {
color[x][y] = 'X';
}
dray(x - 1, y - 1, n, m, color);
dray(x + 1, y + 1, n, m, color);
}
}
private static void drab(int x, int y, int n, int m, char color[][]) {
if (x >= 0 && x < n && y >= 0 && y < m && (color[x][y] == 'B' || color[x][y] == 'G')) {
if (color[x][y] == 'G') {
color[x][y] = 'Y';
} else {
color[x][y] = 'X';
}
drab(x + 1, y - 1, n, m, color);
drab(x - 1, y + 1, n, m, color);
}
}
}
while(line=readline()){
let lines = line.split(" ");
let n = parseInt(lines[0]);
let m = parseInt(lines[1]);
let arr = new Array();
for(let i = 0; i < n; i++){
let line2 = readline();
arr[i] = new Array();
for(let j = 0; j < m; j++){
arr[i][j] = line2[j];
//print(arr[i][j]);
}
}
let step = 0;
for(let i = 0; i < n; i++){
for(let j = 0; j < m; j++){
//print("---------## 訪問點(diǎn)(" + i +" , "+ j + " ): " +arr[i][j]);
if(arr[i][j] == 'Y'){
draw_y(arr, i, j, n, m);
step++;
}else if(arr[i][j] == 'B'){
draw_b(arr, i, j, n, m);
step++;
}else if(arr[i][j] == 'G'){
draw_y(arr, i, j, n, m);
step++;
draw_b(arr, i, j, n, m);
step++
}
}
}
print(step);
}
function draw_y(arr,x,y,n,m){
//print("draw_y:");
//print(x,y,n,m);
if(x >= 0 && x < n && y >=0 && y < m && (arr[x][y] == 'Y' || arr[x][y] == 'G')){
if(arr[x][y] == 'Y'){
arr[x][y] == 'X';
}else{
arr[x][y] == 'B';
}
//print("("+x+","+y+")"+"左上角:");
draw_y(arr, x-1, y-1, n, m);
//print("("+x+","+y+")"+"右下角:");
draw_y(arr, x+1, y+1, n, m);
}
}
function draw_b(arr,i,j,n,m){
//print("draw_b:");
//print(i,j,n,m);
if(i >= 0 && i < n && j >=0 && j < m && (arr[i][j] == 'G' || arr[i][j] == 'B')){
if(arr[i][j] == 'B'){
arr[i][j] == 'X';
}else{
arr[i][j] == 'Y';
}
//print("("+i+","+j+")"+"左下角:");
draw_b(arr, i-1, j+1, n, m);
//print("("+i+","+j+")"+"右上角:");
draw_b(arr, i+1,j-1,n,m);
}
}
已經(jīng)調(diào)試了好多天,就是無法通過!求助!
a.v8js:36: RangeError: Maximum call stack size exceeded
function draw_y(arr,x,y,n,m){
^
RangeError: Maximum call stack size exceeded
at draw_y (a.v8js:36:16)
at draw_y (a.v8js:46:9)
at draw_y (a.v8js:49:9)
at draw_y (a.v8js:46:9)
at draw_y (a.v8js:49:9)
at draw_y (a.v8js:46:9)
at draw_y (a.v8js:49:9)
at draw_y (a.v8js:46:9)
at draw_y (a.v8js:49:9)
at draw_y (a.v8js:46:9)
你的輸出為:a.v8js:36: RangeError: Maximum call stack size exceeded
function draw_y(arr,x,y,n,m){
^
RangeError: Maximum call stack size exceeded
at draw_y (a.v8js:36:16)
at draw_y (a.v8js:46:9)
at draw_y (a.v8js:49:9)
at draw_y (a.v8js:46:9)
at draw_y (a.v8js:49:9)
at draw_y (a.v8js:46:9)
at draw_y (a.v8js:49:9)
at draw_y (a.v8js:46:9)
at draw_y (a.v8js:49:9)
at draw_y (a.v8js:46:9)
這里的編譯器太差勁了, node 6.11 不能用不說, node 6.0 居然還有運(yùn)行不一致的問題;
下面例子本地運(yùn)行18, 上去就變成了 15n0
const times = (m, n, matrix) => {
let sum = 0;
for (let i = 0; i < m + n - 1; i++) {
let flag = false
let j = Math.min(i, n - 1)
for (; matrix[j] && matrix[j][i - j]; j--) {
if (matrix[j][i - j] === 'B') {
matrix[j][i - j] = 'X'
flag = true
} else if (matrix[j][i - j] === 'G') {
matrix[j][i - j] = 'Y'
flag = true
} else if (flag) {
sum++
flag = false
}
}
if (flag) {
sum++
}
}
// console.log(sum);
// console.log(matrix);
for (let i = 0; i < m || i < n; i++) {
let flag = false
for (let j = 0; matrix[j] && matrix[j][i + j]; j++) {
if (matrix[j][i + j] === 'Y') {
matrix[j][i + j] = 'X'
flag = true
} else if (flag) {
sum++
flag = false;
}
}
if (flag) {
flag = false
sum++
}
}
for (let i = 0; i < m || i < n; i++) {
let flag = false
for (let j = 0; matrix[j + i] && matrix[i + j][j]; j++) {
if (matrix[i + j][j] === 'Y') {
matrix[i + j][j] = 'X'
flag = true
} else if (flag) {
sum++
flag = false;
}
}
if (flag) {
flag = false
sum++
}
}
// console.log(matrix);
// console.log(sum);
return sum;
}
/**
while (line = readline()) {
var lines = line.split(' ');
var m = parseInt(lines[0]);
var n = parseInt(lines[1]);
let arr = [];
for (let i = 0; i < n; i++) {
let line2 = readline();
arr.push(line2.split(''));
}
print(times(m, n, arr));
}
**/
times(5, 6, [
"XBGBX".split(''),
"YBBYB".split(''),
"BGGXX".split(''),
"XYYBG".split(''),
"XYBGG".split(''),
"YYXYX".split('')
])
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。