java前端代碼 java前端開發(fā)工具

這段java前端代碼看不懂了 求解答 謝謝

您好,application是作用域,常用三個方法getAttribute setAttribute removeAttribute

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比安溪網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式安溪網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋安溪地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。

setAttribute 向作用域中存放值 key :String , value :Object

getAttribute 向作用域中取值

你這段代碼的意思 是

從作用域中獲取 key = "c"的值

如果為空 放進(jìn)去一個值,以便下次訪問不為空

如果不為空,獲取當(dāng)前值并加1。

前端可以用java寫力扣嗎

前端刷題用js還是java

前端刷題用js還是java_用JavaScript刷LeetCode的正確姿勢

?

韋桂超

原創(chuàng)

關(guān)注

0點贊·1164人閱讀

雖然很多人都覺得前端算法弱,但其實 JavaScript 也可以刷題啊!最近兩個月斷斷續(xù)續(xù)刷完了 leetcode 前 200 的 middle + hard ,總結(jié)了一些刷題常用的模板代碼。走過路過發(fā)現(xiàn) bug 請指出,拯救一個辣雞(但很帥)的少年就靠您啦!

常用函數(shù)

包括打印函數(shù)和一些數(shù)學(xué)函數(shù)。

const _max =Math.max.bind(Math);

const _min=Math.min.bind(Math);

const _pow=Math.pow.bind(Math);

const _floor=Math.floor.bind(Math);

const _round=Math.round.bind(Math);

const _ceil=Math.ceil.bind(Math);

const log=console.log.bind(console);//const log = _ = {}

log 在提交的代碼中當(dāng)然是用不到的,不過在調(diào)試時十分有用。但是當(dāng)代碼里面加了很多 log 的時候,提交時還需要一個個注釋掉就相當(dāng)麻煩了,只要將 log 賦值為空函數(shù)就可以了。

舉一個簡單的例子,下面的代碼是可以直接提交的。

//計算 1+2+...+n//const log = console.log.bind(console);

const log = _ ={}functionsumOneToN(n) {

let sum= 0;for (let i = 1; i = n; i++) {

sum+=i;

log(`i=${i}: sum=${sum}`);

}returnsum;

}

sumOneToN(10);

位運算的一些小技巧

判斷一個整數(shù) x 的奇偶性: x 1 = 1 (奇數(shù)) , x 1 = 0 (偶數(shù))

求一個浮點數(shù) x 的整數(shù)部分: ~~x ,對于正數(shù)相當(dāng)于 floor(x) 對于負(fù)數(shù)相當(dāng)于 ceil(-x)

計算 2 ^ n : 1 n 相當(dāng)于 pow(2, n)

計算一個數(shù) x 除以 2 的 n 倍: x n 相當(dāng)于 ~~(x / pow(2, n))

判斷一個數(shù) x 是 2 的整數(shù)冪(即 x = 2 ^ n ): x (x - 1) = 0

※注意※:上面的位運算只對32位帶符號的整數(shù)有效,如果使用的話,一定要注意數(shù)!據(jù)!范!圍!

記住這些技巧的作用:

提升運行速度 ?

提升逼格 ?

舉一個實用的例子,快速冪(原理自行g(shù)oogle)

//計算x^n n為整數(shù)

functionqPow(x, n) {

let result= 1;while(n) {if (n 1) result *= x; //同 if(n%2)

x = x *x;

n= 1; //同 n=floor(n/2)

}returnresult;

}

鏈表

剛開始做 LeetCode 的題就遇到了很多鏈表的題。惡心心。最麻煩的不是寫題,是調(diào)試?。。∮谑强偨Y(jié)了一些鏈表的輔助函數(shù)。

/**

* 鏈表節(jié)點

* @param {*} val

* @param {ListNode} next*/

function ListNode(val, next = null) {this.val =val;this.next =next;

}/**

* 將一個數(shù)組轉(zhuǎn)為鏈表

* @param {array} a

* @return {ListNode}*/const getListFromArray= (a) ={

let dummy= newListNode()

let pre=dummy;

a.forEach(x= pre = pre.next = newListNode(x));returndummy.next;

}/**

* 將一個鏈表轉(zhuǎn)為數(shù)組

* @param {ListNode} node

* @return {array}*/const getArrayFromList= (node) ={

let a=[];while(node) {

a.push(node.val);

node=node.next;

}returna;

}/**

* 打印一個鏈表

* @param {ListNode} node*/const logList= (node) ={

let str= 'list: ';while(node) {

str+= node.val + '-';

node=node.next;

}

str+= 'end';

log(str);

}

還有一個常用小技巧,每次寫鏈表的操作,都要注意判斷表頭,如果創(chuàng)建一個空表頭來進(jìn)行操作會方便很多。

let dummy = newListNode();//返回

return dummy.next;

使用起來超爽噠~舉個例子。@leetcode 82。題意就是刪除鏈表中連續(xù)相同值的節(jié)點。

/** @lc app=leetcode id=82 lang=javascript

*

* [82] Remove Duplicates from Sorted List II*/

/**

* @param {ListNode} head

* @return {ListNode}*/

var deleteDuplicates = function(head) {//空指針或者只有一個節(jié)點不需要處理

if (head === null || head.next === null) returnhead;

let dummy= newListNode();

let oldLinkCurrent=head;

let newLinkCurrent=dummy;while(oldLinkCurrent) {

let next=oldLinkCurrent.next;//如果當(dāng)前節(jié)點和下一個節(jié)點的值相同 就要一直向前直到出現(xiàn)不同的值

if (next oldLinkCurrent.val ===next.val) {while (next oldLinkCurrent.val ===next.val) {

next=next.next;

}

oldLinkCurrent=next;

}else{

newLinkCurrent= newLinkCurrent.next =oldLinkCurrent;

oldLinkCurrent=oldLinkCurrent.next;

}

}

newLinkCurrent.next= null; //記得結(jié)尾置空~

logList(dummy.next);returndummy.next;

};

deleteDuplicates(getListFromArray([1,2,3,3,4,4,5]));

deleteDuplicates(getListFromArray([1,1,2,2,3,3,4,4,5]));

deleteDuplicates(getListFromArray([1,1]));

deleteDuplicates(getListFromArray([1,2,2,3,3]));

本地運行結(jié)果

list: 1-2-5-end

list:5-end

list: end

list:1-end

是不是很方便!

矩陣(二維數(shù)組)

矩陣的題目也有很多,基本每一個需要用到二維數(shù)組的題,都涉及到初始化,求行數(shù)列數(shù),遍歷的代碼。于是簡單提取出來幾個函數(shù)。

/**

* 初始化一個二維數(shù)組

* @param {number} r 行數(shù)

* @param {number} c 列數(shù)

* @param {*} init 初始值*/const initMatrix= (r, c, init = 0) = new Array(r).fill().map(_ = newArray(c).fill(init));/**

* 獲取一個二維數(shù)組的行數(shù)和列數(shù)

* @param {any[][]} matrix

* @return [row, col]*/const getMatrixRowAndCol= (matrix) = matrix.length === 0 ? [0, 0] : [matrix.length, matrix[0].length];/**

* 遍歷一個二維數(shù)組

* @param {any[][]} matrix

* @param {Function} func*/const matrixFor= (matrix, func) ={

matrix.forEach((row, i)={

row.forEach((item, j)={

func(item, i, j, row, matrix);

});

})

}/**

* 獲取矩陣第index個元素 從0開始

* @param {any[][]} matrix

* @param {number} index*/

functiongetMatrix(matrix, index) {

let col= matrix[0].length;

let i= ~~(index /col);

let j= index - i *col;returnmatrix[i][j];

}/**

* 設(shè)置矩陣第index個元素 從0開始

* @param {any[][]} matrix

* @param {number} index*/

functionsetMatrix(matrix, index, value) {

let col= matrix[0].length;

let i= ~~(index /col);

let j= index - i *col;return matrix[i][j] =value;

}

找一個簡單的矩陣的題示范一下用法。@leetcode 566。題意就是將一個矩陣重新排列為r行c列。

/** @lc app=leetcode id=566 lang=javascript

*

* [566] Reshape the Matrix*/

/**

* @param {number[][]} nums

* @param {number} r

* @param {number} c

* @return {number[][]}*/

var matrixReshape = function(nums, r, c) {//將一個矩陣重新排列為r行c列

//首先獲取原來的行數(shù)和列數(shù)

let [r1, c1] =getMatrixRowAndCol(nums);

log(r1, c1);//不合法的話就返回原矩陣

if (!r1 || r1 * c1 !== r * c) returnnums;//初始化新矩陣

let matrix =initMatrix(r, c);//遍歷原矩陣生成新矩陣

matrixFor(nums, (val, i, j) ={

let index= i * c1 + j; //計算是第幾個元素

log(index);

setMatrix(matrix, index, val);//在新矩陣的對應(yīng)位置賦值

});returnmatrix;

};

let x= matrixReshape([[1],[2],[3],[4]], 2, 2);

log(x)

二叉樹

當(dāng)我做到二叉樹相關(guān)的題目,我發(fā)現(xiàn),我錯怪鏈表了,嗚嗚嗚這個更惡心。

當(dāng)然對于二叉樹,只要你掌握先序遍歷,后序遍歷,中序遍歷,層序遍歷,遞歸以及非遞歸版,先序中序求二叉樹,先序后序求二叉樹,基本就能AC大部分二叉樹的題目了(我瞎說的)。

二叉樹的題目 input 一般都是層序遍歷的數(shù)組,所以寫了層序遍歷數(shù)組和二叉樹的轉(zhuǎn)換,方便調(diào)試。

function TreeNode(val, left = null, right = null) {this.val =val;this.left =left;this.right =right;

}/**

* 通過一個層次遍歷的數(shù)組生成一棵二叉樹

* @param {any[]} array

* @return {TreeNode}*/

functiongetTreeFromLayerOrderArray(array) {

let n=array.length;if (!n) return null;

let index= 0;

let root= new TreeNode(array[index++]);

let queue=[root];while(index

let top=queue.shift();

let v= array[index++];

top.left= v == null ? null : newTreeNode(v);if (index

let v= array[index++];

top.right= v == null ? null : newTreeNode(v);

}if(top.left) queue.push(top.left);if(top.right) queue.push(top.right);

}returnroot;

}/**

* 層序遍歷一棵二叉樹 生成一個數(shù)組

* @param {TreeNode} root

* @return {any[]}*/

functiongetLayerOrderArrayFromTree(root) {

let res=[];

let que=[root];while(que.length) {

let len=que.length;for (let i = 0; i len; i++) {

let cur=que.shift();if(cur) {

res.push(cur.val);

que.push(cur.left, cur.right);

}else{

res.push(null);

}

}

}while (res.length 1 res[res.length - 1] == null) res.pop(); //刪掉結(jié)尾的 null

returnres;

}

一個例子,@leetcode 110,判斷一棵二叉樹是不是平衡二叉樹。

/**

* @param {TreeNode} root

* @return {boolean}*/

var isBalanced = function(root) {if (!root) return true; //認(rèn)為空指針也是平衡樹吧

//獲取一個二叉樹的深度

const d = (root) ={if (!root) return 0;return _max(d(root.left), d(root.right)) + 1;

}

let leftDepth=d(root.left);

let rightDepth=d(root.right);//深度差不超過 1 且子樹都是平衡樹

if (_min(leftDepth, rightDepth) + 1 =_max(leftDepth, rightDepth) isBalanced(root.left) isBalanced(root.right)) return true;return false;

};

log(isBalanced(getTreeFromLayerOrderArray([3,9,20,null,null,15,7])));

log(isBalanced(getTreeFromLayerOrderArray([1,2,2,3,3,null,null,4,4])));

二分查找

參考 C++ STL 中的 lower_bound 和 upper_bound 。這兩個函數(shù)真的很好用的!

/**

* 尋找=target的最小下標(biāo)

* @param {number[]} nums

* @param {number} target

* @return {number}*/

functionlower_bound(nums, target) {

let first= 0;

let len=nums.length;while (len 0) {

let half= len 1;

let middle= first +half;if (nums[middle]

first= middle + 1;

len= len - half - 1;

}else{

len=half;

}

}returnfirst;

}/**

* 尋找target的最小下標(biāo)

* @param {number[]} nums

* @param {number} target

* @return {number}*/

functionupper_bound(nums, target) {

let first= 0;

let len=nums.length;while (len 0) {

let half= len 1;

let middle= first +half;if (nums[middle] target) {

len=half;

}else{

first= middle + 1;

len= len - half - 1;

}

}returnfirst;

}

照例,舉個例子,@leetcode 34。題意是給一個排好序的數(shù)組和一個目標(biāo)數(shù)字,求數(shù)組中等于目標(biāo)數(shù)字的元素最小下標(biāo)和最大下標(biāo)。不存在就返回 -1。

/** @lc app=leetcode id=34 lang=javascript

*

* [34] Find First and Last Position of Element in Sorted Array*/

/**

* @param {number[]} nums

* @param {number} target

* @return {number[]}*/

var searchRange = function(nums, target) {

let lower=lower_bound(nums, target);

let upper=upper_bound(nums, target);

let size=nums.length;//不存在返回 [-1, -1]

if (lower = size || nums[lower] !== target) return [-1, -1];return [lower, upper - 1];

};

在 VS Code 中刷 LeetCode

前面說的那些模板,難道每一次打開新的一道題都要復(fù)制一遍么?當(dāng)然不用啦。

首先配置代碼片段 選擇 Code - Preferences - User Snippets ,然后選擇 JavaScript

然后把文件替換為下面的代碼:

{"leetcode template": {"prefix": "@lc","body": ["const _max = Math.max.bind(Math);","const _min = Math.min.bind(Math);","const _pow = Math.pow.bind(Math);","const _floor = Math.floor.bind(Math);","const _round = Math.round.bind(Math);","const _ceil = Math.ceil.bind(Math);","const log = console.log.bind(console);","http:// const log = _ = {}","/**************** 鏈表 ****************/","/**"," * 鏈表節(jié)點"," * @param {*} val"," * @param {ListNode} next"," */","function ListNode(val, next = null) {"," this.val = val;"," this.next = next;","}","/**"," * 將一個數(shù)組轉(zhuǎn)為鏈表"," * @param {array} array"," * @return {ListNode}"," */","const getListFromArray = (array) = {"," let dummy = new ListNode()"," let pre = dummy;"," array.forEach(x = pre = pre.next = new ListNode(x));"," return dummy.next;","}","/**"," * 將一個鏈表轉(zhuǎn)為數(shù)組"," * @param {ListNode} list"," * @return {array}"," */","const getArrayFromList = (list) = {"," let a = [];"," while (list) {"," a.push(list.val);"," list = list.next;"," }"," return a;","}","/**"," * 打印一個鏈表"," * @param {ListNode} list "," */","const logList = (list) = {"," let str = 'list: ';"," while (list) {"," str += list.val + '-';"," list = list.next;"," }"," str += 'end';"," log(str);","}","/**************** 矩陣(二維數(shù)組) ****************/","/**"," * 初始化一個二維數(shù)組"," * @param {number} r 行數(shù)"," * @param {number} c 列數(shù)"," * @param {*} init 初始值"," */","const initMatrix = (r, c, init = 0) = new Array(r).fill().map(_ = new Array(c).fill(init));","/**"," * 獲取一個二維數(shù)組的行數(shù)和列數(shù)"," * @param {any[][]} matrix"," * @return [row, col]"," */","const getMatrixRowAndCol = (matrix) = matrix.length === 0 ? [0, 0] : [matrix.length, matrix[0].length];","/**"," * 遍歷一個二維數(shù)組"," * @param {any[][]} matrix "," * @param {Function} func "," */","const matrixFor = (matrix, func) = {"," matrix.forEach((row, i) = {"," row.forEach((item, j) = {"," func(item, i, j, row, matrix);"," });"," })","}","/**"," * 獲取矩陣第index個元素 從0開始"," * @param {any[][]} matrix "," * @param {number} index "," */","function getMatrix(matrix, index) {"," let col = matrix[0].length;"," let i = ~~(index / col);"," let j = index - i * col;"," return matrix[i][j];","}","/**"," * 設(shè)置矩陣第index個元素 從0開始"," * @param {any[][]} matrix "," * @param {number} index "," */","function setMatrix(matrix, index, value) {"," let col = matrix[0].length;"," let i = ~~(index / col);"," let j = index - i * col;"," return matrix[i][j] = value;","}","/**************** 二叉樹 ****************/","/**"," * 二叉樹節(jié)點"," * @param {*} val"," * @param {TreeNode} left"," * @param {TreeNode} right"," */","function TreeNode(val, left = null, right = null) {"," this.val = val;"," this.left = left;"," this.right = right;","}","/**"," * 通過一個層次遍歷的數(shù)組生成一棵二叉樹"," * @param {any[]} array"," * @return {TreeNode}"," */","function getTreeFromLayerOrderArray(array) {"," let n = array.length;"," if (!n) return null;"," let index = 0;"," let root = new TreeNode(array[index++]);"," let queue = [root];"," while(index n) {"," let top = queue.shift();"," let v = array[index++];"," top.left = v == null ? null : new TreeNode(v);"," if (index n) {"," let v = array[index++];"," top.right = v == null ? null : new TreeNode(v);"," }"," if (top.left) queue.push(top.left);"," if (top.right) queue.push(top.right);"," }"," return root;","}","/**"," * 層序遍歷一棵二叉樹 生成一個數(shù)組"," * @param {TreeNode} root "," * @return {any[]}"," */","function getLayerOrderArrayFromTree(root) {"," let res = [];"," let que = [root];"," while (que.length) {"," let len = que.length;"," for (let i = 0; i len; i++) {"," let cur = que.shift();"," if (cur) {"," res.push(cur.val);"," que.push(cur.left, cur.right);"," } else {"," res.push(null);"," }"," }"," }"," while (res.length 1 res[res.length - 1] == null) res.pop(); // 刪掉結(jié)尾的 null"," return res;","}","/**************** 二分查找 ****************/","/**"," * 尋找=target的最小下標(biāo)"," * @param {number[]} nums"," * @param {number} target"," * @return {number}"," */","function lower_bound(nums, target) {"," let first = 0;"," let len = nums.length;",""," while (len 0) {"," let half = len 1;"," let middle = first + half;"," if (nums[middle] target) {"," first = middle + 1;"," len = len - half - 1;"," } else {"," len = half;"," }"," }"," return first;","}","","/**"," * 尋找target的最小下標(biāo)"," * @param {number[]} nums"," * @param {number} target"," * @return {number}"," */","function upper_bound(nums, target) {"," let first = 0;"," let len = nums.length;",""," while (len 0) {"," let half = len 1;"," let middle = first + half;"," if (nums[middle] target) {"," len = half;"," } else {"," first = middle + 1;"," len = len - half - 1;"," }"," }"," return first;","}","$1"],"description": "LeetCode常用代碼模板"}

}

自己是學(xué)java的,現(xiàn)在想寫前端代碼的話用哪個軟件比較好?

1、Sublime Text

Sublime Text是一個代碼編輯器也是HTML和散文先進(jìn)的文本編輯器。漂亮的用戶界面和非凡的功能,例如迷你地圖,多選擇,Python的插件,代碼段,等等。完全可自定義鍵綁定,菜單和工具欄。Sublime Text的主要功能包括:拼寫檢查,書簽,完整的Python API,Goto功能,即時項目切換,多選擇,多窗口等等。

2、Dreamweaver

Adobe Dreamweaver使用所見即所得的接口,亦有HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用)編輯的功能,借助經(jīng)過簡化的智能編碼引擎,輕松地創(chuàng)建、編碼和管理動態(tài)網(wǎng)站。 訪問代碼提示,即可快速了解 HTML、CSS 和其他Web標(biāo)準(zhǔn)。使用視覺輔助功能減少錯誤并提高網(wǎng)站開發(fā)速度。

3、Visual Studio Code

Visual Studio Code中文版是微軟推出的帶 GUI 的代碼編輯器,軟件功能非常強(qiáng)大,界面簡潔明晰、操作方便快捷,設(shè)計得很人性化。軟件主要改進(jìn)了文檔視圖,完善了對 Markdown的支持,新增PHP語法高亮。

4、HBuilder

HBuilder是專為前端打造的開發(fā)工具,具有飛一樣的編碼、最全的語法庫和瀏覽器兼容數(shù)據(jù)、可以方便的制作手機(jī)APP、最保護(hù)眼睛的綠柔設(shè)計等特點。支持HTML、CSS、JS、PHP的快速開發(fā)。從開放注冊以來深受廣大前端朋友們的喜愛。

5、WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 開發(fā)工具。目前已經(jīng)被廣大中國JS開發(fā)者譽(yù)為“Web前端開發(fā)神器”、“最強(qiáng)大的HTML5編輯器”、“最智能的JavaScript IDE”等。與IntelliJ IDEA同源,繼承了IntelliJ IDEA強(qiáng)大的JS部分的功能。

網(wǎng)頁標(biāo)題:java前端代碼 java前端開發(fā)工具
鏈接分享:http://www.muchs.cn/article0/doeegoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名標(biāo)簽優(yōu)化、用戶體驗App開發(fā)、品牌網(wǎng)站建設(shè)、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名