最近在練習前端題的時候,遇到一道難題,有沒有大佬會這道題?

附上答題鏈接:初級web前端工程師
uj5u.com熱心網友回復:
那第一個N不就是多余的呀。啥用沒有呀uj5u.com熱心網友回復:
常規點的
function turns (param) {
/** `方位映射` */
const pathMap = { E: { L: 'N', R: 'W' }, S: { L: 'E', R: 'W' }, W: { L: 'S', R: 'N' }, N: { L: 'W', R: 'E' } }
/** `轉向串列` */
const paths = [ ...param.toUpperCase() ]
/** `最終結果`:默認為面向北方 */
let res = pathMap.N
paths.forEach((path, index) => {
/** `轉向后朝向` */
path = res[ path ]
// 如果還需要轉向,則回傳方位映射,否則回傳當前朝向
res = index < paths.length - 1 ? pathMap[ path ] : path
// 列印此次轉向后的朝向
console.log(path, '==>', path)
})
return res
}
下面這個也算是一種思路。突然想起來的。因為與上面的主要思路是一樣的,只是取轉向的方式不同,所以改起來快,做個參考吧
function turns2 (param) {
/** `方位映射` */
const pathMap: any = { E: { L: 'N', R: 'W' }, S: { L: 'E', R: 'W' }, W: { L: 'S', R: 'N' }, N: { L: 'W', R: 'E' } }
/** `轉向串列` */
const paths = [ ...param.toUpperCase() ]
/** `最終結果`:默認為面向北方 */
let res = pathMap.N
while (paths.length) {
/** `當前轉向`:轉向串列同時減去第一項 */
const current = paths.shift()
/** `轉向后朝向` */
const path = res[ current ]
// 如果還需要轉向,則回傳方位映射,否則回傳當前朝向
res = paths.length ? pathMap[ path ] : path
// 列印此次轉向后的朝向
console.log(current, '==>', path)
}
return res
}
const paths = 'LRR'
console.log('最終朝向 ==>', turns(paths))
console.log('最終朝向 ==>', turns2(paths))
uj5u.com熱心網友回復:
剛想到另一個計算方法,寫的時候發現上面的pathMap中面向東的轉向定義錯了,應該是
const pathMap = { E: { L: 'N', R: 'S' }, S: { L: 'E', R: 'W' }, W: { L: 'S', R: 'N' }, N: { L: 'W', R: 'E' } }
下面這個,也是可以的
function turns3 (param) {
/** `方位串列` */
const direction = [ 'E', 'S', 'W', 'N' ]
/** `轉向串列` */
const paths = [ ...param.toUpperCase() ]
/** `最終朝向`:默認為面向北方 */
let index = 3
paths.forEach(path => {
/**
* 轉向后朝向計算
* 左轉:-1;右轉:+1
* 邊界修正:<0 則 =3(面向東左轉為北);>3 則 =0(面向北右轉為東)
*/
index += { 'L': -1, 'R': 1 }[ path ]
index < 0 && (index = 3)
index > 3 && (index = 0)
// 列印此次轉向后的朝向
console.log(path, '==>', direction[ index ])
})
return direction[ index ]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/284062.html
標籤:JavaScript
上一篇:關于NETCONF修改設備引數的java實作,在使用device時報SSH 通道關閉的錯。
下一篇:Struts2入門專案一直報錯
