畫家小Q又開始他的藝術(shù)創(chuàng)作。小Q拿出了一塊有NxM像素格的畫板, 畫板初始狀態(tài)是空白的,用'X'表示。
小Q有他獨特的繪畫技巧,每次小Q會選擇一條斜線, 如果斜線的方向形如'/',即斜率為1,小Q會選擇這條斜線中的一段格子,都涂畫為藍色,用'B'表示;如果對角線的方向形如'',即斜率為-1,小Q會選擇這條斜線中的一段格子,都涂畫為黃色,用'Y'表示。
如果一個格子既被藍色涂畫過又被黃色涂畫過,那么這個格子就會變成綠色,用'G'表示。
小Q已經(jīng)有想畫出的作品的樣子, 請你幫他計算一下他最少需要多少次操作完成這幅畫。
每個輸入包含一個測試用例。
每個測試用例的第一行包含兩個正整數(shù)N和M(1 <= N, M <= 50), 表示畫板的長寬。
接下來的N行包含N個長度為M的字符串, 其中包含字符'B','Y','G','X',分別表示藍色,黃色,綠色,空白。整個表示小Q要完成的作品。
輸出一個正整數(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(wǎng)
從(0,0)位置開始遍歷
如果遍歷到(i,j)位置為B——>則繼續(xù)向左下方(i+1,j-1)和右上方(i-1,j+1)
遍歷時,遇到將B置為X,遇到G置為(消除B)置為Y
count++;
如果遍歷到(i,j)位置為Y——>則繼續(xù)向左上方(i-1,j-1)和右下方(i+1,j+1)
遍歷時,遇到將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("---------## 訪問點(" + 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 居然還有運行不一致的問題;
下面例子本地運行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)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。